【问题标题】:Angular $watch a service object from a controller and read propertiesAngular $watch 来自控制器的服务对象并读取属性
【发布时间】:2014-12-06 20:37:17
【问题描述】:

我一直在尝试从控制器观察服务对象。我一直在尝试以一种很好的方式解决这个问题,但这是不可能的。我能找到的唯一解决方案就是这个(参见代码)。问题是当我“console.log”返回值时,我可以看到对象但我无法访问属性。它说“未定义”。所以我能找到的唯一解决方案就是这个,但我不太喜欢它。有什么想法???

这是我的控制器的“观察者”:

$scope.$watchCollection(function(){return angular.toJson(measuresServ.getFinalMeasuresVal())},function(newVal, oldVal) {
    $scope.measures = JSON.parse(newVal);
    console.log($scope.measures);
    console.log($scope.measures.temperatura);
});

这是我服务的对象:

var finalMeasures = {};

return {
    getMeasures : function(){
        finalMeasures.temperatura = 24;
        finalMeasures.humedad = 45;
    },
    getMeasuresVal: function(){
        return finalMeasures;
    }

}

【问题讨论】:

    标签: angularjs object service controller watch


    【解决方案1】:

    我认为它应该有效:

    $scope.$watch(function () { 
        return measuresServ.getFinalMeasuresVal();
    }, function (newVal, oldVal) {
        console.log(newVal);
    }, true);
    

    【讨论】:

    • 这样你就可以只看个别的房产了。当你试图观察一个对象时,你必须使用“$watchCollection”,否则当某些属性发生变化时,你不会注意到这些变化。问题是一旦返回,我就无法访问对象的属性。如果您尝试执行“newVal.temperatura”,它将返回未定义。这就是为什么我必须作为 JSON 字符串返回并解析它的原因。但对我来说是相当丑陋的。我想直接做。
    猜你喜欢
    • 2021-03-06
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 2014-05-04
    相关资源
    最近更新 更多