2017-04-13 150 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