AngularJS工厂对象不会通过控制器自动更新视图

时间:2015-02-12 14:10:16

标签: angularjs websocket factory

所以我有这个问题,我现在已经摸不着头几天了,似乎我要么发现真的过时的代码,有些东西被打破了,或者我显然不知道我在做什么。

我无法为我的爱让我的控制器使用我工厂的模型来更新视图。唯一发生的事情是显示默认模型并且永远不会更新。

这是我工厂相关部分的摘要:

var entryData = {
    "postMessage": []
    , "setPeerCount": {}
    , "nudge": {}
};
ws.onmessage = function(message) {
    listener(JSON.parse(message.data));
};
function listener(rpc2) {
    console.log(rpc2);
    if(rpc2.hasOwnProperty("method") && entryData.hasOwnProperty(rpc2.method)) {
        if(type.set[rpc2.method] !== undefined) {
            entryData[rpc2.method] = rpc2.params;
        }
        else if(type.add[rpc2.method] !== undefined) {
            entryData[rpc2.method][entryData[rpc2.method].length] = rpc2.params;
        };
        console.log(entryData)
    }
};
return entryData;

我的控制器(套接字是工厂,sockItToMe是测试应用程序名称):

sockItToMe.controller('peerCount', ['$scope', 'socket', function($scope, socket){
     $scope.peerCount = socket;
}]);

我的观点:

<div ng-controller="peerCount">
    {{ peerCount }}
</div>

我在HTML中输出的输出:

{"postMessage":[],"setPeerCount":{},"nudge":{}}

我通过直接读取对象从控制台获得的输出:

Object {postMessage: Array[0], setPeerCount: Object, nudge: Object}
nudge: Object__proto__: Object
postMessage: Array[1]0: Object
    message: "Welcome"__proto__: Object
    length: 1__proto__: Array[0]
setPeerCount: ObjectpeerCount: "3"

1 个答案:

答案 0 :(得分:0)

the link posted I posted in the comments的其他信息:虽然你可以只做$ scope。$ apply()而不是$ rootScope。$ apply()它会在内部调用$ rootScope。$ digest()所以我们不要&#39;在这里获得任何性能优化。你可以做的是调用$ scope。$ digest()。这将在当前范围上执行,并仅更新子元素。但是父级范围不会更新,直到再次运行整个摘要循环。如果你需要,我认为你必须做$ scope.apply()。

[关于stackoverflow:现在更好地提出评论或接受答案?因为我的答案或多或少只是一个指向正确答案的链接。我会把它留给你;)]