AngularJS - 推送JSON数据(结构正确,但缺少一些东西)

时间:2013-02-13 07:41:14

标签: javascript json angularjs

我是AngularJS的新手,我现在正在转换一个小应用程序,虽然有一件事让我感到沮丧。

我的目标是在仪表板中添加一个模块,如果我对JSON数据进行硬编码,一切都能正常工作,但是,在使用变量时似乎存在问题。

我的服务:

var pushData = angular.toJson({"modID": "mod_rText_01", "sequence": 1, "group": 1, "dashboard": 1, "type": "text", "content": ["17%", "operating capacity"]});
console.log(' :: Module data pushed: ' + pushData);
$rootScope.$broadcast('locations', pushData); // broadcast to controller

我的控制器:

// listen for service location updates
$scope.$on('locations', function(event, pushData) {
    console.log(' :: Module data received: ' + pushData);
    $scope.locations.push(pushData);
});

控制台日志:

:: Module data pushed: {"modID":"mod_rText_01","sequence":1,"group":1,"dashboard":1,"type":"text","content":["17%","operating capacity"]}
:: Module data received: {"modID":"mod_rText_01","sequence":1,"group":1,"dashboard":1,"type":"text","content":["17%","operating capacity"]}

如上所述,如果我将控制器行更改为:$scope.locations.push({"modID":"mod_rText_01","sequence":1,"group":1,"dashboard":1,"type":"text","content":["17%","operating capacity"]});

它正常工作。我觉得我错过了什么!虽然,根据console.log,变量'pushData'是正确的,但没有任何反应。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

问题是您将对象转换为JSON。

你在这里做的是你实际上发送的是STRING,而不是一个对象。

angular.toJson({"modID": "mod_rText_01", "sequence": 1, "group": 1, "dashboard": 1, "type": "text", "content": ["17%", "operating capacity"]});

此字符串正在事件中发布并在控制器中拾取。因此,在下面的代码中,您实际上是在向数组添加字符串而不是对象:

$scope.locations.push(pushData);

解决方案:只是发布常规JavaScript对象而不是字符串,它应该按预期工作。 $broadcast() and $on()也能够处理真实对象。

var dataObj = {"modID": "mod_rText_01", "sequence": 1, "group": 1, "dashboard": 1, "type": "text", "content": ["17%", "operating capacity"]};
$rootScope.$broadcast('locations', dataObj);