2017-04-13 183 views
2

是否可以在父範圍和我的指令的隔離範圍之間建立雙向綁定,但是不通過我的指令屬性傳遞?Angularjs文字雙向綁定

'='建立了一個雙向的,但不是字面的綁定:而是直接從父級的作用域中獲取指定的值,然後使用這樣的名稱查找指令的屬性,然後評估它,然後使用結果值作爲父範圍變量名稱。

'@'按照我的意願建立一個字面綁定,但只是單向的。

我也試過'= @',希望Angular.js聰明地理解這一點,但沒有運氣。

我知道我也可以使用非隔離範圍(範圍:true),但在我的代碼中,我使用了一些需要隔離範圍的技術。

有什麼方法可以做我想要的嗎?

回答

2

將模型通過指令和狀態之間的範圍考慮爲不良做法,因爲它違反了鬆耦合設計原則。意味着它可能使指令更少重複使用,在範圍中具有副作用,並引入不明確的行爲。當我們談論JavaScript中的全局狀態時,同樣的原因也是如此,這也被認爲是一種不好的做法(但仍可用於一些罕見的特定情況)。

雖然我建議仔細看看單向綁定的@屬性。因爲,實際上,它們提供了一種向前和向後傳遞值的方法,同時保持指令端的控制權。不要混淆的術語:)

// in directive 
var theValueReturnsByController = scope.myOneWayAttr({theValuePassedToController: 1}); 

alert(theValueReturnsByController === 2); 

// in controller 
scope.oneWayAttrHandler = function(theValueReceivedFromDirective) { 
    theValueReturnedToDirective = theValueReceivedFromDirective + 1; 
    return theValueReturnedToDirective; 
}; 

模板:

<my-directive my-one-way-attr="oneWayAttrHandler(theValuePassedToController)"></my-directive> 
0

如果你可以直接調用它,這將是一個糟糕的設計。爲什麼不通過綁定來傳遞它?您明確使用該方法。

+0

我期待有人會說塔。那麼,這是一個答案:因爲這將最終寫入冗餘的樣板代碼。如果Angular.js的作者認爲這是不偏激的做法,我想他們沒有留下任何選擇來使用非孤立範圍。 – vdudouyt