【发布时间】:2019-03-10 23:49:18
【问题描述】:
我正在编写一个 AngularJS 1.x 指令(我们称之为MyDirective)。它的作用域声明如下:
scope: {
accessor: '='
}
在其link 函数中,我将一个新对象分配给该accessor 字段,如下所示:
scope.accessor = {
// methods such as doSomethingToMyDirective()
};
现在,我正在使用 $compile 动态实例化这个指令:
var element = $compile('<div data-my-directive data-accessor="directiveAccessor"></div>')(myScope);
运行后,我当前的作用域 (myScope) 具有一个 directiveAccessor 属性,该属性引用在指令中创建的对象实例。
问题:该字段立即不可用。
换句话说,一旦我运行了$compile,我就无法在下一个命令中立即访问myScope.directiveAccessor。当我稍后检查范围时,该字段就在那里,并且可能单个 $timeout 就足够了。
通过一些断点,我可以观察到对象确实是在执行$compile 时创建的;内部作用域上的accessor 已经指向该对象。但是,似乎将内部作用域上的 accessor 的值复制到 myScope.directiveAccessor 的双向绑定直到稍后才会激活。
有什么方法可以强制 AngularJS 立即复制双向绑定的值(即无需等待任何承诺)?
【问题讨论】:
-
您应该访问生命周期方法 $onInit 和 $onChanges 中的绑定变量,例如。 docs.angularjs.org/guide/component -- 请注意这些适用于任何控制器,而不仅仅是组件控制器。
标签: javascript angularjs angularjs-directive