2014-01-23 47 views
33

我只是想知道爲什麼我需要爲ng-href添加雙花括號,而其他一些指令不需要它們?爲什麼指令ng-href需要{{}}而其他指令不需要?

<a ng-href="{{myScopeVar}}" ng-if="myScopeVar">link</a> 

注意ng-href需要括號而ng-if沒有。

+3

只是假設要建立動態的URL,例如:'NG-HREF = 「#/ foobar的/ {{barfoo}}」'。您也可以閱讀[手冊]中的說明(http://docs.angularjs.org/api/ng.directive:ngHref)以獲取更長的解釋。 – Yoshi

回答

44

我不太清楚你的問題。但我認爲你想知道爲什麼在角度指令中有不同的語法樣式。首先,請看看這個帖子:Difference between double and single curly brace in angular JS?答案解釋了{{}},{}之間的區別,沒有大括號。

對於您的具體示例,如文檔中所述:ng-href需要模板(任何可包含{{}}標記的字符串),而ng-if需要表達式 - 例如,你可能不會寫{{}},因爲角度評估它。

如果你看看你會看到的角源,那麼ng-href使用attr.$observe而ng-if使用$scope.$watch函數。對於屬性值的每次更改,都會記錄$ observe。當表達式產生一個新值時,$ watch被調用。

但爲什麼這兩種不同的方式呢?我認爲有一點更容易使用和代碼可讀性。現在你可以這樣寫:

<a ng-href="http://yourdomain.com/users/{{userId}}/post/{{postId}}">title</a> 

正如你所看到的,你只寫了動態插入userIdpostId值的表達式。如果ng-href也將使用$watch功能,我們不得不寫(不這樣做,因爲它西港島線無法正常工作 - 它只是表明了區別):

<a ng-href="'http://yourdomain.com/users/'+userId+'/post'+postId">title</a> 
+2

我可以像'ng-href =「{{my_function()}}''一樣使用'ng-href'的函數輸出嗎? – ShellFish

+2

@ShellFish是的,你可以 – swfong

-1

即使IUSE ng-hrefdata-ng-href它拋出的錯誤進行驗證。 我用<link rel="stylesheet" data-ng-href="{{datas}}" href="/">爲了通過驗證錯誤。

希望它可以幫助別人