Javascript 添加指令作用域使其余部分不可更新
有一个名为Javascript 添加指令作用域使其余部分不可更新,javascript,angularjs,Javascript,Angularjs,有一个名为foo的指令,其定义如下: <div ng-app="app" ng-controller="mainController"> {{ name }} <foo param="123"></foo> </div> return { restrict : 'E', controller : function($scope){ $scope.name = 'Name
foo
的指令,其定义如下:
<div ng-app="app" ng-controller="mainController">
{{ name }}
<foo param="123"></foo>
</div>
return {
restrict : 'E',
controller : function($scope){
$scope.name = 'Name defined in directive';
console.log($scope.param); // 123 as expected
},
scope : {
param : "@"
}
}
按预期工作,并使用指令中定义的名称覆盖初始名称
但是,由于有param
属性,我想访问它的值。所以我做了这样的单向绑定:
<div ng-app="app" ng-controller="mainController">
{{ name }}
<foo param="123"></foo>
</div>
return {
restrict : 'E',
controller : function($scope){
$scope.name = 'Name defined in directive';
console.log($scope.param); // 123 as expected
},
scope : {
param : "@"
}
}
这破坏了父作用域的更新。现在运行此命令时,它将呈现初始名称
,而不是指令
中定义的预期名称。那么这里的问题是什么呢?当您使用scope选项时,您创建了一个根据定义与父作用域分离的隔离作用域
您需要将name
添加到隔离作用域中,并像param
一样将其传入,或者需要删除作用域并在父作用域上定义param
下面是关于隔离作用域的说明:
顾名思义,该指令的隔离作用域隔离除已显式添加到作用域{}哈希对象的模型之外的所有对象。这在构建可重用组件时非常有用,因为它可以防止组件更改模型状态,但显式传入的模型除外
注意:通常,作用域原型从其父级继承。独立作用域不存在。有关隔离作用域的更多信息,请参阅“指令定义对象-作用域”部分
name
上的双向绑定是不够的,因为它是基本类型(字符串)。它应该是类似于model.name的属性,或者在name change=“name=newName”
上使用表达式绑定,双向绑定可以很好地处理字符串。演示:哎哟,看起来你是对的(即使在从withinthe指令更新变量时也是如此)。我不知道为什么我有这样的假设,但事实并非如此,很抱歉当时的评论有误导性。