如何在隔离作用域指令中绑定父作用域event.time变量(不使用$parent)
在AngularJS隔离作用域指令中绑定父作用域
event.time的正确方式 没问题,在AngularJS的隔离作用域指令里,咱们完全可以通过显式的作用域绑定来访问父作用域的event.time,根本不需要用$parent,这也是隔离作用域设计的初衷之一。
具体实现步骤:
修改
initModel指令的隔离作用域配置
在指令的scope选项中,定义一个用于绑定的属性(比如命名为eventTime),使用=符号来声明双向绑定,这样它就能和父作用域指定的变量建立双向关联:.directive('initModel', function($compile) { return { restrict: 'A', scope: { // 用=实现双向绑定,属性名驼峰转短横线后在HTML中使用 eventTime: '=' }, link: function(scope, element, attrs) { // 现在可以直接在隔离作用域中使用scope.eventTime访问父作用域的event.time console.log(scope.eventTime); // 输出父作用域的event.time值 // 如果需要修改,直接赋值即可,会同步到父作用域 // scope.eventTime = '新的时间值'; } }; })在HTML模板中传递绑定属性
在使用init-model指令的地方,通过短横线命名的属性(对应指令里的驼峰属性名),把父作用域的event.time传递给指令:<!-- 假设这是printPreviewCntrl控制器下的模板 --> <div init-model event-time="event.time"></div>
原理说明:
=类型的绑定会在隔离作用域和父作用域之间创建双向数据绑定,当父作用域的event.time发生变化时,指令隔离作用域里的eventTime会自动同步更新;反过来,在指令里修改scope.eventTime,父作用域的event.time也会跟着变化。这种方式既符合AngularJS的设计规范,又比$parent更清晰、更易维护。
内容的提问来源于stack exchange,提问作者oomer
相关产品推荐
相关产品推荐

