有一个指令叫做foo
,定义如下:
<div ng-app="app" ng-controller="mainController">
{{ name }}
<foo param="123"></foo>
</div>
以下是相关的初始化代码片段:
var app = angular.module('app', []);
app.controller('mainController', function($scope){
$scope.name = 'Initial name';
});
app.directive('foo', function(){
return {
restrict : 'E',
controller : function($scope){
$scope.name = 'Name defined in directive';
console.log($scope.param); // undefined
}
};
});
这按预期工作,并使用指令中定义的名称
覆盖了初始名称
。
然而,由于有param
属性,我想访问它的值。所以我这样做了单向绑定:
return {
restrict : 'E',
controller : function($scope){
$scope.name = 'Name defined in directive';
console.log($scope.param); // 123 as expected
},
scope : {
param : "@"
}
}
这导致了父级作用域的更新中断。现在运行时,它会呈现Initial name
而不是预期的Name defined in directive
。那么问题出在哪里呢?
name
上进行双向绑定是不够的,因为它是一个原始类型(字符串)。它应该是一个像model.name
这样的属性,或者使用表达式绑定on-name-change="name = newName"
。 - floribon