我是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'是正确的,但没有任何反应。
任何帮助将不胜感激!
答案 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);