0

因此,我有以下简化的 plunker 来显示我的指令遇到的问题:

http://plnkr.co/edit/aXW7YlpensjcYsLTGwmo?p=preview

这有一个使用 compile 属性并返回具有 pre/post 函数的对象的指令。我遇到的问题是,当我在指令上使用 templateUrl 属性时,我对 pre 函数中的范围所做的任何更改都不会反映在 post 函数传入的范围中。

plunker 具有控制台日志,因此如果您打开控制台,您会注意到有一个对象已记录和未定义,即在 compile 属性中返回的对象的 pre 和 post 函数中记录 scope.options。如果你打开 app.js 并注释掉 templateUrl 定义,你会得到同一个对象的 2 个日志,它不再在帖子中未定义。这在使用模板属性时也有效。

仅当指令定义了 templateUrl 属性时,我在编译的返回对象前函数中所做的更改是否有任何原因不会反映在后函数范围中?

4

1 回答 1

1

这里有两个问题:

1)第一个是containerDir创建隔离范围,因此控制器不能通过其绑定对跨度testOptions不可用,而是通过。inputDir optionsundefined

2)第二个与您的问题更相关的是,该options操作使用了一个隔离范围绑定,该绑定似乎在不同时间进行了评估(链接前和链接后)。下次评估绑定时,您对变量所做的更改似乎会被覆盖。

在预链接方法中,绑定被评估为未定义(因为testOptions由于问题#1而未定义。该未定义值然后被您的预链接中的某些代码覆盖。然后,当后链接执行时,我认为再次评估绑定并options再次设置为undefined.

我建议除了用 修复第一个隔离范围绑定问题containerDir外,您还可以仅使用该options属性来检索值并使用另一个范围变量来操作数据,以便它不会被覆盖。

于 2013-06-25T18:17:45.647 回答