0

我对 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”是正确的,但没有任何反应。

任何帮助将不胜感激!

4

1 回答 1

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);
于 2013-02-13T07:51:33.640 回答