0

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

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

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

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

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

4

3 回答 3

2

我创建了一个有效的 CodePen 示例,它应该可以为您提供您正在寻找的答案。

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

于 2013-09-26T16:21:06.750 回答
0

我创建了一个小提琴来尝试复制该问题,但似乎子范围 ( scope: true) 与隔离范围一样定期更新。我必须有另一个问题导致 $observe 不定期触发。

于 2013-09-27T08:47:44.577 回答
0

$observe在范围内不可用,它在attrs

link: function(scope, elements, attrs){
    attrs.$observe('rowItem', ...)
}
于 2013-09-26T16:10:36.720 回答