2014-06-22 14 views

回答

4

這只是它實施的方式。

的選擇使用插值表達的原因是,它可以讓你做到這一點:

ng-src="http://my.generic.url/some/resource/{{IDdefinedInScope}}" 

如果沒有使用插值,你就必須做任何這樣的:

ng-src="'http://my.generic.url/some/resource/' + IDdefinedInScope" 

,或者:

ng-src="someResourceUrl(IDdefinedInScope)" 

$scope.someResourceUrl = function (id) { 
    return 'http://my.generic.url/some/resource/' + id; 
}; 

(...這是更詳細和clamsy和更少的聲明。)


五言中,是什麼讓這裏這可能是需要將輸出已經一個字符串(而不是對象)。

+0

爲了方便起見,打破一致性對用戶來說更是不便。如果在使用什麼情況下它不合邏輯,用戶將被迫查找語法。好的答案。 ty –

+0

這裏沒有一致性打破。有幾個屬性指令採用插值表達式。您可能碰巧主要使用那些沒有的,但'ngSrc'絕對不是**「一種」:) A​​ngular的指令與其他人的自定義指令完全相同,他們可以(也將會)使用任何形式... – gkalpak

+0

至少它與JS中的其他任何東西都適合,有多種方式可以做任何事情! –

2

我想知道這個我自己。在源頭把我們帶回到角度處於嬰兒期的時候。這是他們的第一個0.9版之前的大約100次提交:9627c4b50e,問題#11

事實證明,沒有擴展提交消息,也沒有任何問題消息。代碼位於/src/markups.js的底部,源代碼中的評論很少,絕對不是任何類型的文檔。所以下面只是我的猜想,可能不準確。它看起來在angular的早期開始,他們定義了大約6種不同的工具:指令,過濾器,格式化器,標記,驗證器和小部件。繼續前進一些提交,我發現了這些定義:

  • 指令爲DOM元素創建自定義屬性,但不添加元素到dom。
  • 小工具可以創建一個自定義屬性,用於修改現有的DOM元素或全新的DOM元素。
  • 過濾器用於格式化顯示給用戶的數據。
  • 格式化程序用於在用於顯示的數據格式和用於存儲的格式之間轉換數據格式。
  • 驗證器用於根據定義的類型或模式檢查用戶輸入。
  • 標記將DOM元素或此內容的部分內容轉換爲其他文本或DOM元素。

此時使用的指令/小工具表達式,使用的標記{{interpolation}},過濾器使用了管道|插值內部以及使用純文本的格式化程序/驗證程序。 ng-href和ng-src屬於標記類別。

與現在相比(1.3),Directives,Widgets和Markups現在合併爲指令。過濾器和格式化器現在只是過濾器,而驗證器在表單元素的ngModelController中。

由於此遷移,他們必須決定如何處理標記。他們將很多布爾標記(ng-checked/multiple/readonly/selected/disabled)改爲表達式,但決定保留ng-src和ng-href作爲插值。你可以找到a discussion on google groups where Misko Hevery explains the exception

所以它是從早期的分類派生出來的,爲了簡單性或向後兼容性的緣故而堅持。

相關問題