Javascript 双向数据绑定不适用于隔离作用域中的阵列
我无法理解双向数据绑定如何在指令的隔离范围内工作 若我将全新的对象分配给隔离作用域中的某个属性,则控制器作用域中的属性也会更新。然而,数组的情况并非如此。如果我将新数组分配给作用域上的属性,则该数组不会在控制器中更新,并且该属性的更多双向数据绑定将丢失。这可能会令人困惑,请检查。 这是来自plunker的代码,我在这里创建了两个指令:一个用于对象分配,另一个用于数组Javascript 双向数据绑定不适用于隔离作用域中的阵列,javascript,angularjs,Javascript,Angularjs,我无法理解双向数据绑定如何在指令的隔离范围内工作 若我将全新的对象分配给隔离作用域中的某个属性,则控制器作用域中的属性也会更新。然而,数组的情况并非如此。如果我将新数组分配给作用域上的属性,则该数组不会在控制器中更新,并且该属性的更多双向数据绑定将丢失。这可能会令人困惑,请检查。 这是来自plunker的代码,我在这里创建了两个指令:一个用于对象分配,另一个用于数组 var app = angular.module('plunker', []); app.controller('MainCtr
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.object = {val: "initialized in controller"};
$scope.array = ["initialized in controller"];
$scope.changeArray = function ( ) {
$scope.array = ['changed in controller'];
}
$scope.changeObject = function () {
$scope.object = {val: "changed in controller"};
}
});
app.directive ('array', function () {
return {
restrict: 'E',
template: 'array in directive: {{value}} <br/> <button ng-click="click()">change array in directive</button>',
scope: {
value: '=*'
},
link: function (scope) {
scope.click = function () {
scope.value= ["changed in directive"];
}
}
}
});
app.directive ('object', function () {
return {
restrict: 'E',
template: 'val in directive is: {{value}} <br/> <button ng-click="click()">change object in directive</button>',
scope: {
value: '='
},
link: function (scope) {
scope.click = function () {
scope.value = {val: 'changed in directive'};
}
}
}
});
var-app=angular.module('plunker',[]);
应用程序控制器('MainCtrl',函数($scope){
$scope.object={val:“在控制器中初始化”};
$scope.array=[“在控制器中初始化”];
$scope.changeArray=函数(){
$scope.array=['在控制器中更改'];
}
$scope.changeObject=函数(){
$scope.object={val:“在控制器中更改”};
}
});
app.directive('array',function(){
返回{
限制:'E',
模板:“指令中的数组:{{value}}
更改指令中的数组”,
范围:{
值:'=*'
},
链接:功能(范围){
scope.click=函数(){
scope.value=[“在指令中更改”];
}
}
}
});
app.directive('object',function(){
返回{
限制:'E',
模板:“指令中的val是:{{value}}
指令中的更改对象”,
范围:{
值:'='
},
链接:功能(范围){
scope.click=函数(){
scope.value={val:'在指令'}中更改;
}
}
}
});
为什么只“=*”而不是“=”?我想我以前从未见过这种情况,没有它似乎也能正常工作。@Erik Honn首先我尝试了“=”,但这对数组不起作用,所以我决定尝试“$watchCollection”-“=*”。然后我不确定我是否理解这个问题。如果你切换到一个常规的“=”-绑定你的插件看起来对我来说很好。为什么“=*”而不是“=”?我想我以前从未见过这种情况,没有它似乎也能正常工作。@Erik Honn首先我尝试了“=”,但这对数组不起作用,所以我决定尝试“$watchCollection”-“=*”。然后我不确定我是否理解这个问题。如果你换成常规的“=”-绑定,你的plunker看起来对我很好。