Angularjs文字双向绑定

时间:2017-04-13 08:29:21

标签: angularjs data-binding

是否可以在父作用域和我的指令的隔离作用域之间建立双向绑定,但不通过我的指令的属性传递它?

'='建立一个双向但不是文字的绑定:它不是直接从父的作用域中获取指定的值,而是查找带有这样名称的指令的属性,然后对其进行求值,然后使用结果值作为父范围变量名称。

'@'按照我的意愿建立一个文字绑定,但只有单向。

我也试过'= @',希望Angular.js足够聪明地理解,但没有运气。

我知道我也可以使用非隔离范围(范围:true),但在我的代码中我使用了一些necesarilly需要隔离范围的技术。

有没有办法做我想做的事?

2 个答案:

答案 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)

如果您可以直接调用它,那将是一个糟糕的设计。为什么不通过绑定传递它?您明确使用该方法。