是否可以在父作用域和我的指令的隔离作用域之间建立双向绑定,但不通过我的指令的属性传递它?
'='建立一个双向但不是文字的绑定:它不是直接从父的作用域中获取指定的值,而是查找带有这样名称的指令的属性,然后对其进行求值,然后使用结果值作为父范围变量名称。
'@'按照我的意愿建立一个文字绑定,但只有单向。
我也试过'= @',希望Angular.js足够聪明地理解,但没有运气。
我知道我也可以使用非隔离范围(范围:true),但在我的代码中我使用了一些necesarilly需要隔离范围的技术。
有没有办法做我想做的事?
答案 0 :(得分:3)
将模型通过指令和国家之间的范围视为不良做法,因为它违反了松散耦合设计原则。意味着它可能使指令的可重用性降低,在范围内产生副作用,并引入不明确的行为。当我们谈论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>
答案 1 :(得分:1)
如果您可以直接调用它,那将是一个糟糕的设计。为什么不通过绑定传递它?您明确使用该方法。