Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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中指令的scope属性?_Javascript_Angularjs_Angularjs Scope_Directive - Fatal编程技术网

Javascript 如何理解angularjs中指令的scope属性?

Javascript 如何理解angularjs中指令的scope属性?,javascript,angularjs,angularjs-scope,directive,Javascript,Angularjs,Angularjs Scope,Directive,在angularjs指令的指南教程中,指令对象可以具有scope属性。它定义了指令的范围 虽然范围atribute值可能为true,但下面是对范围的解释:() true:原型从其父级继承的新子作用域 将为指令的元素创建如果有多个指令打开 同一元素请求一个新范围,但只创建一个新范围。 我对粗体的句子感到困惑。同一元素上的多个指令是如何使用同一作用域的?根据我的说法,这意味着作用域将按元素创建,而不是按指令创建 因此,范围将自动在指令之间共享,并且不会为每个指令创建不同的副本 在此链接中 他们提到:

在angularjs指令的指南教程中,指令对象可以具有scope属性。它定义了指令的范围

虽然范围atribute值可能为true,但下面是对范围的解释:()

true:原型从其父级继承的新子作用域 将为指令的元素创建如果有多个指令打开 同一元素请求一个新范围,但只创建一个新范围。


我对粗体的句子感到困惑。同一元素上的多个指令是如何使用同一作用域的?

根据我的说法,这意味着作用域将按元素创建,而不是按指令创建

因此,范围将自动在指令之间共享,并且不会为每个指令创建不同的副本

在此链接中

他们提到:

如果您使用的是AngularJS 1.2,那么下一个障碍是您不能将两个隔离范围指令应用于同一个元素。看看下面的代码。它所做的只是对同一个元素应用两个指令。而且,这些指令只需要一个隔离的作用域

因此,如果在两个指令中使用相同的scope变量,那么它将抛出以下错误

错误:错误:multidir

多指令资源争用

多个指令[bnith,bnThis]要求在上创建新的/隔离的作用域

因此,对于这种情况,以嵌套方式转换或放置指令可以完成这项工作

下面的代码片段给出了我上面提到的示例

//为我们的演示创建一个应用程序模块。
var-app=angular.module(“演示”,[]);
// -------------------------------------------------- //
// -------------------------------------------------- //
//我请求一个隔离范围指令。
应用程序指令(
“这个”,
函数(){
//返回指令配置。请注意,我们正在创建
//隔离作用域,即使我们没有绑定任何表达式。
返回({
链接:angular.noop,
限制:“A”,
作用域:{}
});
}
);
// -------------------------------------------------- //
// -------------------------------------------------- //
//我请求一个隔离范围指令。
应用程序指令(
“这一点”,
函数(){
//返回指令配置。请注意,我们正在创建
//隔离作用域,即使我们没有绑定任何表达式。
返回({
链接:angular.noop,
限制:“A”,
作用域:{}
});
}
);

查看控制台输出。


根据我的说法,这意味着范围将按元素而不是按指令创建

因此,范围将自动在指令之间共享,并且不会为每个指令创建不同的副本

在此链接中

他们提到:

如果您使用的是AngularJS 1.2,那么下一个障碍是您不能将两个隔离范围指令应用于同一个元素。看看下面的代码。它所做的只是对同一个元素应用两个指令。而且,这些指令只需要一个隔离的作用域

因此,如果在两个指令中使用相同的scope变量,那么它将抛出以下错误

错误:错误:multidir

多指令资源争用

多个指令[bnith,bnThis]要求在上创建新的/隔离的作用域

因此,对于这种情况,以嵌套方式转换或放置指令可以完成这项工作

下面的代码片段给出了我上面提到的示例

//为我们的演示创建一个应用程序模块。
var-app=angular.module(“演示”,[]);
// -------------------------------------------------- //
// -------------------------------------------------- //
//我请求一个隔离范围指令。
应用程序指令(
“这个”,
函数(){
//返回指令配置。请注意,我们正在创建
//隔离作用域,即使我们没有绑定任何表达式。
返回({
链接:angular.noop,
限制:“A”,
作用域:{}
});
}
);
// -------------------------------------------------- //
// -------------------------------------------------- //
//我请求一个隔离范围指令。
应用程序指令(
“这一点”,
函数(){
//返回指令配置。请注意,我们正在创建
//隔离作用域,即使我们没有绑定任何表达式。
返回({
链接:angular.noop,
限制:“A”,
作用域:{}
});
}
);

查看控制台输出。


我们不知道在使用我们的指令时,范围将包含什么。 因此,为我们的指令提供一个定义明确的公共文件是一种良好的做法 面向接口。这确保了指令不会依赖于或受其影响 使用它的作用域上的任意属性。 对于指令及其模板中要使用的范围,我们有三个选项。这 在指令定义中定义:
•从使用小部件的地方重新使用范围。这是 默认值,对应于范围:false。

•创建子作用域,该子作用域通常继承自 使用小部件。您可以使用scope:true来指定此值。

•创建一个不典型继承的隔离作用域,以便 与父母完全隔离。通过将对象传递给 范围属性:范围:{…}。 我们希望将我们的小部件的模板与系统的其余部分完全解耦 应用程序,以便两者之间不存在数据泄漏的危险

注意:-[虽然隔离作用域不典型地从其父级继承, 它仍然可以访问
scope: {
 isolated1: '@attribute1',
 isolated2: '=attribute2',
 isolated3: '&attribute3'
}
attrs.$observe('attribute1', function(value) {
 isolatedScope.isolated1 = value;
});
var parentGet = $parse(attrs['attribute2']);
var parentSet = parentGet.assign;
parentScope.$watch(parentGet, function(value) {
 isolatedScope.isolated2 = value;
});
isolatedScope.$watch('isolated2', function(value) {
 parentSet(parentScope, value);
});
parentGet = $parse(attrs['attribute3']);
scope.isolated3 = function(locals) {
    return parentGet(parentScope, locals);
};