【问题标题】:Angular js $watch on multidimensional array?多维数组上的Angular js $watch?
【发布时间】:2014-11-08 19:07:35
【问题描述】:

你好下面的朋友是我的数组。

data.php 文件

$array = array(
   '0' => array(
            'id' = 1,
            'name' = 'test',
            'key' = array(
                       '0' = 'key1',
                       '1' = 'key2',
                       '2' = 'key3'
                    )
         ),
   '1' => array(
            'id' = 3,
            'name' = 'test3',
            'key' = array(
                       '0' = 'key7',
                       '1' = 'key8',
                       '2' = 'key9'
                    )
         ),
     '2' => array(
            'id' = 15,
            'name' = 'test30',
            'key' = array(
                       '0' = 'key4',
                       '1' = 'key5',
                       '2' = 'key6'
                    )
         )
);
echo json_encode($array);

下面是我的js代码。

$http({method: 'GET', url: $rootScope.serverURL+'data.php'}).
  success(function (data, status, headers, config) {
      $rootScope.simpleData = data;
  }).
  error(function (data, status, headers, config) {

  });

$scope.$watch('page + numPage + simpleData', function() {
    console.log('working');    
},true);

现在我想在“key”上设置希望。

$scope.$watch('page + numPage + simpleData.key', function() {
    console.log('not working');    
},true);

当我像这样工作正常编写此代码时,此代码不起作用。

$scope.$watch('page + numPage + simpleData[0].key', function() {
    console.log('working');    
},true);

当我编写 js 时,它工作正常。角度 js 监视键,但仅适用于“0”元素。 在数组中我有很多元素我如何查看所有元素“Key”。

请帮忙

谢谢

【问题讨论】:

  • 显然,它不适用于simpleData.key - 没有这样的东西。
  • @NewDev 我现在编辑我的问题检查。
  • 在您的示例中,simpleData 到底是什么?
  • @NewDev in simpleData 我将存储我的 json 数组,请在上面的代码中正确查看,谢谢
  • @NewDev 我现在编辑我的代码检查。

标签: javascript angularjs multidimensional-array


【解决方案1】:

$watching "simpleData.key" 不起作用,因为$scope.simpleData.key === undefined

如果您尝试深度观察数组,您可以将true 作为第三个参数添加到$watch,它会进行深度观察,但这会大大降低性能。每个 $digest 循环都必须深入比较您的数组。

$watch("simpleData", function(){...}, true);

【讨论】:

  • 嘿,亲爱的,谢谢您的回答,这是可行的,但不能使用多个关键字,例如。 $watch("page + numPage + simpleData", function(){...}, true);当我写这不起作用时,请帮忙。非常感谢
  • 你的答案是对的,但是 $watch("page + numPage + simpleData", function(){...}, true);这是行不通的。我通过第三个参数 true 但不起作用。
  • 您为什么认为这会起作用?要查看多个表达式,请使用$watchGroup(["page", "numPage"], function(){...}),但不要使用simpleData,因为$watchGroup 不会进行深度监视。
  • 这行得通,非常感谢亲爱的,实际上我开始学习 Angular js,感谢大家的帮助。
  • 另外,请先阅读documentation - 它会有所帮助。并且不要称这里的人为“亲爱的” :) 这可能是一种文化问题,但它给人的感觉很奇怪。
猜你喜欢
  • 2014-06-26
  • 2015-02-06
  • 2023-03-27
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 2017-11-06
相关资源
最近更新 更多