是否可以在父范围和我的指令的隔离范围之间建立双向绑定(bind),但不通过我的指令的属性传递它?
'=' 建立了双向绑定(bind),但不是文字绑定(bind):它不是直接从父范围中获取指定值,而是查找具有此类名称的指令属性,然后对其求值,然后使用结果值作为父作用域变量名。
'@' 建立了我想要的文字绑定(bind),但只是单向的。
我也试过“=@”,希望 Angular.js 足够聪明,可以理解它,但运气不好。
我知道我也可以使用非隔离范围 (scope:true),但在我的代码中,我使用了一些需要隔离范围的技术。
有什么方法可以做我想做的事吗?
最佳答案
通过指令和状态之间的范围传递模型被认为是一种不好的做法,因为它违反了松散耦合设计原则。意味着它可能会降低指令的可重用性,在范围内产生副作用,并引入不明确的行为。当我们谈论 JavaScript 中的全局状态时,同样的原因也是如此,这也被认为是一种不好的做法(但在一些罕见和特定的情况下仍然可用)。
不过,我建议仔细研究一下单向绑定(bind)的 @
属性。因为,实际上,它们提供了一种向前和向后传递值以及将控制权保持在指令端的方法。不要与条款混淆:)
// 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>
关于Angularjs 文字双向绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43387174/