繁体   English   中英

强制双向绑定生效

[英]Force Two-Way-Binding to Take Effect

我正在编写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命令中立即访问myScope.directiveAccessor 当我稍后检查范围时,该字段在那里,并且可能只需一个$timeout就足够了。

通过一些断点,我可以观察到确实在执行$compile就创建了该对象。 accessor上的内部范围已经指向的对象。 但是,似乎将双向复制将值从内部作用域中的accessor复制到myScope.directiveAccessor的双向绑定直到以后才变为活动状态。

有没有办法强迫AngularJS立即复制双向绑定的值(即不等待任何承诺)?

使用表达式绑定( & )立即设置父范围变量:

app.directive("myDirective", function () {
    return {
        scope: { onPostLink: "&" },
        link: postLink
    };
    function postLink(scope, elem, attrs) {
        scope.accessor = {
            doSomethingToMyDirective: function() {
                return "Hello world";
            }
        };
        scope.onPostLink({$event: scope.accessor});
        scope.$on("$destroy", function() {
            scope.onPostLink({$event: null});
        });
    }
})

用法:

<my-directive on-post-link="directiveAccessor=$event">
</my-directive>

销毁隔离范围时,请确保将引用为null 否则,代码就有产生内存泄漏的风险。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM