Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/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 双向数据绑定不适用于隔离作用域中的阵列_Javascript_Angularjs - Fatal编程技术网

Javascript 双向数据绑定不适用于隔离作用域中的阵列

Javascript 双向数据绑定不适用于隔离作用域中的阵列,javascript,angularjs,Javascript,Angularjs,我无法理解双向数据绑定如何在指令的隔离范围内工作 若我将全新的对象分配给隔离作用域中的某个属性,则控制器作用域中的属性也会更新。然而,数组的情况并非如此。如果我将新数组分配给作用域上的属性,则该数组不会在控制器中更新,并且该属性的更多双向数据绑定将丢失。这可能会令人困惑,请检查。 这是来自plunker的代码,我在这里创建了两个指令:一个用于对象分配,另一个用于数组 var app = angular.module('plunker', []); app.controller('MainCtr

我无法理解双向数据绑定如何在指令的隔离范围内工作

若我将全新的对象分配给隔离作用域中的某个属性,则控制器作用域中的属性也会更新。然而,数组的情况并非如此。如果我将新数组分配给作用域上的属性,则该数组不会在控制器中更新,并且该属性的更多双向数据绑定将丢失。这可能会令人困惑,请检查。 这是来自plunker的代码,我在这里创建了两个指令:一个用于对象分配,另一个用于数组

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看起来对我很好。