javascript - angularjs 在两个模板之间共享自定义指令

标签 javascript angularjs angularjs-directive

我有一个带有下一个参数的自定义指令

 return {
        scope: {
            ngModel: '='
        },
        require: "ngModel",
        link: function (scope, element, attrs, ngModel) {
    // directive code ...
}

和两个使用这个指令的模板

//template 1
  <div class="panel-body">
       <div ng-include src="'email.html'"></div>
  </div>

// email.html 
  <div id="template"
       ng-model="emailNotification"
       custom-directive></div>

// template 2
  <div class="panel-body">
       <div ng-include src="'sms.html'"></div>
  </div>

// sms.html 
  <div id="template"
       ng-model="smsNotification"
       custom-directive></div>

这里的问题是当我在这两个模板之间切换时,'custom-directive' 中的 ng-model 不会刷新并且两个不同的 ng-models 之间的值共享。但是我希望该指令不会那样做。

我的错误在哪里,为什么指令共享这个变量?

最佳答案

当您使用 = 运算符时,指令的范围属性以相同的名称绑定(bind)到父级的范围属性。由于您在同一父级指令的两个实例上都使用了 ng-model,因此它们最终都引用了相同的 ng-model。

如果你想要父作用域的属性的评估值,使用@绑定(bind)。

return {
        scope: {
            ngModel: '@'
        },
        require: "ngModel",
        link: function (scope, element, attrs, ngModel) {
    // directive code ...
}

关于javascript - angularjs 在两个模板之间共享自定义指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45598570/

相关文章:

javascript - 新的 Chart.js 图表 onclick

javascript - 无法使用工厂在 Controller 之间共享数据

javascript - 如何在 angular js 中为 ng-disabled 设置多个值?

javascript - 具有两种方式绑定(bind)的 Angular 指令,过滤器和 ng-repeat

javascript - 当这个字符在 JavaScript 中的同一个字符串中多次使用时,如何在由特殊字符分隔的末尾剪切字符串?

javascript - 警报确认 JavaScript

javascript - 用于头像创建的 jQuery/JavaScript 库?

angularjs - AngularJS 中使用 Promise 和 Defer 进行同步和异步调用

javascript - 从外部调用 AngularJS Controller 函数

angularjs - Angular 需要父 Controller 而不明确指定名称