【问题标题】:$watch for objects in JSON Angularjs$watch 在 JSON Angularjs 中的对象
【发布时间】:2016-09-27 09:39:07
【问题描述】:

我想在 json 对象的特定部分的指令中创建一个 $watch,但它似乎不接受语法(没有出现错误,但它永远不会进入手表内部)

link: function (scope, element) {
scope.JsonObject={
    profs:{
        prof1:[{
           name:example1a,
           id:example1b
        }],
        prof2:[{
           name:example2a,
           id:example2b
        }]
     }
 }  

scope.teachers=scope.JsonObject['profs']

//until here all ok

for ( var  teacher in scope.teachers){
    //stuff to do
    console.log("creating watch of " + teacher);

    scope.$watch('teachers[teacher]', function() {  //here seems to be the problem (it doesnt seem to accept JsonObject.teacher)       
    //stuff to do

}, true);
}

【问题讨论】:

  • 您想通过在指令中创建手表来实现什么,请说明清楚,并且您的代码的 plunkr 将有助于解决您的问题
  • 我所做的是调用一个 highcharts 插件:new Highcharts.chart(teacher + "_id",chartoptions);但在这种情况下,我认为这无关紧要,问题是它永远不会进入手表内
  • JsonObject.teacherundefined 所以你可以使用JsonObject.profsteacher.profs
  • 是的,对不起,我在将代码传递给问题格式时搞砸了。感谢您的关注,已编辑问题

标签: javascript angularjs json watch


【解决方案1】:

以前,teachers[teacher]undefined,因为没有 ' '(引号) 围绕teacher

for (var teacher in $scope.teachers){
    $scope.$watch("teachers['"+ teacher +"']", function(newValue, oldValue) {
      alert("changed");
   }, true);
}

【讨论】:

  • 非常感谢,这正是我要找的。但是,如果有人是新手(比如我)并且有同样的问题,重要的是要知道:1)不可能访问手表内部的变量“teacher”,因为值可能已经改变了手表的执行,使用 newValue , oldValue 代替 2)不要在手表内创建调试器或断点,因为它会弹出一个错误:主要执行等待手表的永无止境的终止(我认为)。而是使用跟踪进行调试,例如 console.log()
【解决方案2】:

字符串不会插入到对象中。

function getTeacher(teacher) {
   return $scope.teachers[teacher]
}

scope.$watch(getTeacher(teacher), function() {
//Do stuff
},  true);

【讨论】:

    【解决方案3】:

    您不能在 $watch 中使用外部值,特别是在循环中。把它想象成一个间隔,如果你把一个间隔或超时放在一个循环中,在间隔之外处理的变量的值(在这种情况下是'$scope.teachers[teacher]')将无法从内部访问,或者至少会取最后一次迭代值。

    【讨论】:

    • 没错,我在之前的回答中评论了类似的内容,但这也是发生的事情。
    猜你喜欢
    • 1970-01-01
    • 2013-02-26
    • 2015-01-06
    • 2016-01-23
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多