Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularjs在两个模板之间共享自定义指令_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

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

Javascript angularjs在两个模板之间共享自定义指令,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我有一个带有下一个参数的自定义指令 return { scope: { ngModel: '=' }, require: "ngModel", link: function (scope, element, attrs, ngModel) { // directive code ... } 和两个使用此指令的模板 //template 1 <div class="panel-body"&

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

 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>
//模板1
//email.html
//模板2
//sms.html
这里的问题是,当我在这两个模板之间切换时,“自定义指令”中的ng模型不会刷新,并且两个不同的ng模型之间会共享值。但我希望该指令不会这样做


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

使用=运算符时,指令的scope属性将以相同的名称绑定到父级的scope属性。由于在同一父级内的指令的两个实例上都使用ng模型,因此它们最终都引用了相同的ng模型

如果要从父范围中获取属性的计算值,请使用@binding

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

指令的作用域有几种不同的形式。根据您期望的结果,您可以全部使用它们。它们是
scope:true
scope:{}
scope:false

每个作用域的行为都不同。您要查找的范围是
scope:{}
,或
scope:true

如果确实使用了
范围:{}
,则希望确保其中的元素使用了正确的语法
=
@
&
。在您的情况下,您需要使用
@
符号

符号说明:

@
:将此属性作为字符串传递
=
:数据将此属性绑定到指令的父范围。
&
:从父作用域传入一个函数,稍后调用。用于传递延迟计算的角度表达式。

在这两个模板之间切换是什么意思?你能用一把小提琴来说明你面临的问题吗?这么简单,这就解决了我的问题!非常感谢,我很感激!谢谢你的推荐!