?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
在href屬性使用Angular的{{hash}}
等標(biāo)記會使鏈接跳轉(zhuǎn)到錯誤的URL,當(dāng)用戶在Angular用值替換 {{hash}}
標(biāo)記前點(diǎn)擊了它。在Angular替換標(biāo)記前鏈接都是錯誤的,會返回類似404錯誤。
ngHref
指令解決了這個問題。
錯誤的寫法:
<a href="http://www.gravatar.com/avatar/{{hash}}"/>
正確的寫法:
<a ng-href="http://www.gravatar.com/avatar/{{hash}}"/>
<A
ng-href="">
...
</A>
參數(shù) | 類型 | 詳述 |
---|---|---|
ngHref | template | 可以包含 |
這個例子演示幾種在鏈接中使用 href
、ng-href
和ng-click
屬性的組合,以及它們不同的行為:
<input ng-model="value" /><br />
<a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br />
<a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br />
<a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br />
<a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br />
<a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br />
<a id="link-6" ng-href="{{value}}">link</a> (link, change location)
it('should execute ng-click but not reload when href without value', Function() {
element(by.id('link-1')).click();
expect(element(by.model('value')).getAttribute('value')).toEqual('1');
expect(element(by.id('link-1')).getAttribute('href')).toBe('');});
it('should execute ng-click but not reload when href empty string', Function() {
element(by.id('link-2')).click();
expect(element(by.model('value')).getAttribute('value')).toEqual('2');
expect(element(by.id('link-2')).getAttribute('href')).toBe('');});
it('should execute ng-click and change url when ng-href specified', Function() {
expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/);
element(by.id('link-3')).click();
// At this point, we navigate away from an Angular page, so we need
// to use browser.driver to get the base webdriver.
browser.wait(Function() {
return browser.driver.getCurrentUrl().then(Function(url) {
return url.match(/\/123$/);
});
}, 5000, 'page should navigate to /123');});
xit('should execute ng-click but not reload when href empty string and name specified', Function() {
element(by.id('link-4')).click();
expect(element(by.model('value')).getAttribute('value')).toEqual('4');
expect(element(by.id('link-4')).getAttribute('href')).toBe('');});
it('should execute ng-click but not reload when no href but name specified', Function() {
element(by.id('link-5')).click();
expect(element(by.model('value')).getAttribute('value')).toEqual('5');
expect(element(by.id('link-5')).getAttribute('href')).toBe(null);});
it('should only change url when only ng-href', Function() {
element(by.model('value')).clear();
element(by.model('value')).sendKeys('6');
expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/);
element(by.id('link-6')).click();
// At this point, we navigate away from an Angular page, so we need
// to use browser.driver to get the base webdriver.
browser.wait(Function() {
return browser.driver.getCurrentUrl().then(Function(url) {
return url.match(/\/6$/);
});
}, 5000, 'page should navigate to /6');});