2013-12-17 44 views
3

如果你在這樣的位置...爲什麼AngularJS會打破自我引用的錨鏈接?

http://www.domain.com/index.html 

...你有一個指向同一個位置的鏈接...

<a href="/index.html">My Link</a> 

...然後單擊在鏈接上什麼都不做。通常你會像往常一樣重定向到頁面;一個方便的方式來刷新頁面(不進行全面刷新)。

我追查到這個奇怪行爲的罪魁禍首AngularJS。

觀察下面的例子:

<body> 
    <a href="">Sample Link</a> 

    <script> 
     var SampleApp = angular.module("SampleApp", []); 
    </script> 
</body> 

http://jsfiddle.net/7vqD9/

通過點擊瀏覽器嘗試去同一個位置(因爲空白的href)的鏈接。 這是正常的

現在讓我們來激活角:

<body ng-app="SampleApp"> 
    <a href="">Sample Link</a> 

    <script> 
     var SampleApp = angular.module("SampleApp", []); 
    </script> 
</body> 

http://jsfiddle.net/7bEp3/

點擊鏈接什麼也不做。

爲什麼AngularJS以這種方式斷開鏈接?我有什麼明顯的理由失蹤?

+2

http://stackoverflow.com/a/16003013/1085699應該給你你正在尋找的答案 –

+1

完美。添加'target =「_ self」'這個技巧。 –

+0

@RowanFreeman這也是我所做的。奇蹟般有效。 – frosty

回答

9

爲什麼Angular會阻止href的傳統行爲?

Mastering web component with AngularJs

AngularJS捆綁前用一個指令,以防止對鏈接 默認動作省略href屬性時。這個 允許我們使用a標籤和ng-click指令創建可點擊元素。例如,我們可以調用a標籤如下:

<a ng-click='showFAQ()'>Frequently Asked Questions</a> 

具有一個標籤沒有一個默認的導航作用是方便,因爲 幾個CSS框架使用一個標籤來呈現不同類型的 視覺元素,導航行爲沒有多大意義。 例如,Twitter的Bootstrap CSS框架使用標籤和 標籤和手風琴組件中的渲染標頭。

關鍵字保留是: 「方便的」

1

角覆蓋a標籤:https://github.com/angular/angular.js/blob/master/src/ng/directive/a.js

線條這裏需要注意的是:

 // if we have no href url, then don't navigate anywhere. 
     if (!element.attr('href')) { 
     event.preventDefault(); 
     } 

角確實ngHref這一點,因爲,只有在角度和範圍完全加載後才設置href,從而防止用戶意外地進入/{{pageUrl}}/

如果你想重新加載頁面,你應該看看Angular提供的$location服務。

相關問題