【问题标题】:Binding value to child scope in angular js在角度js中将值绑定到子范围
【发布时间】:2013-09-27 16:47:44
【问题描述】:

我有一个在表中创建一行的指令。然后我使用 ng-repeat 遍历项目列表以使用指令行填充表,例如:

<tr ng-repeat='item in items' rowItem='item' />

我在定义范围时遇到问题。 我不能使用scope: false,因为它不会分隔 rowItem 值。 我希望能够绑定到 rowItem 值,因此使用隔离范围:scope:{rowItem: '='} 可以按我的意愿工作,但我仍然希望可以访问父范围值。

所以最好的选择是scope: true 但是,我无法将范围绑定到行项目。 我尝试使用attrs.$observe('rowItem', ...),但是当项目列表更改时不会触发,因为 rowItem 不是插值属性。

有没有办法使用可以绑定到属性的新子范围 (scope: true)(就像在隔离范围中一样)?

【问题讨论】:

  • You observer like this scope.watch(attrs.rowItem,function)
  • 谢谢,我已经尝试过了,但它的工作原理与 attrs.$observe 相同,并且仅在属性值更改而不是插值更改时更新。

标签: angularjs scope angularjs-directive


【解决方案1】:

我创建了一个working CodePen example,它应该会给你你正在寻找的答案。

诀窍是使用 scope.$eval(...) ,正如我在示例中所展示的那样。我还想指出,您似乎在尝试滥用指令,但在不了解确切要求的情况下,我只是为您提供答案。根据您提供的示例的简单性,您可能无需自定义指令即可完成您的要求。

【讨论】:

  • 感谢您的回答,我也在使用 $eval 但我认为当项目更改时没有触发观察。我创建了一个小提琴来尝试重新创建问题,但事实证明 $observe 在项目更改时被调用,但由于某种原因它不适合我。
【解决方案2】:

$observe 在范围内不可用,在attrs 中可用:

link: function(scope, elements, attrs){
    attrs.$observe('rowItem', ...)
}

【讨论】:

  • 谢谢,但这只是一个错字。
【解决方案3】:

我创建了一个fiddle 来尝试复制该问题,但似乎子作用域 (scope: true) 与隔离作用域一样定期更新。我一定有另一个问题导致 $observe 不能正常触发。

【讨论】:

    猜你喜欢
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2018-01-28
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多