2014-03-02 111 views
1

可能有人解釋我或指向一個文檔,它不會解釋以下問題: 我無法在link函數中設置'@'映射屬性指示。然而,'='映射的屬性可以在指令的link函數中設置爲特定值。 工作的例子可以發現 here in jsbin設置=和@屬性在角度指令的鏈接功能

我指的是下面的代碼:

directive('myDir', function() { 
    return { 
    scope: { 
     byValue: '@', 
     byRef: '='}, 
    template: '<span>byValue: {{byValue}}<br>byRef: {{byRef}}</span>', 
    link: function(scope) { 
     scope.byValue = 'Custom Value set for byValue'; //this call is ignored!!! 
     scope.byRef = 'Custom Value set for byRef'; 
    } 
    }; 

該指令將呈現:

 
byValue: myProp 
byRef: Custom Value set for byRef 

感謝,並有一個愉快的一天!

Gabriel

回答

0

將對象指定爲範圍屬性會創建一個隔離範圍。

@將本地/指令範圍屬性綁定到DOM屬性的評估值。結果總是一個字符串,因爲DOM屬性是字符串。這種與評估的屬性值(非屬性)綁定的方式。

=將本地/指令範圍屬性綁定到父範圍屬性。這就像一個雙向綁定。

例如,假設你寫這樣的HTML,

<tag test1="name"></tag> 

而且你有一個範圍值

$scope.name = "MyName" 

在你做

scope: { 
    nameProp: '=test1', 
    nameAttr: '@test1' 
} 

一個指令,你會得到

nameProp = "MyName" 
nameAttr = "name" 

當你做到這一點

scope: 
{ 
    byValue: '@', 
    byRef: '=' 
} 

你可以訪問家長作用域byRef酒店需要從指令中,反之亦然。這就是爲什麼你越來越

byRef: Custom Value set for byRef 

byValue情況下,指令$Scope.byValue填充了作用域byValue父的屬性值,而你的情況,如果可能myProp

+0

感謝Muctadir的答案。我可以解決你的問題,但我仍然有問題。在我的例子中,我在'link'函數中設置了範圍的'byValue'屬性。因此,我期望在渲染視圖中設置'link'函數中的值。不幸的是,渲染的視圖顯示了從外部作用域映射的值。看起來,這個角度在'link'函數調用之後設置了一個'@'映射屬性的值。你能證實嗎? – Gabriel