2013-02-13 63 views
0

我對AngularJS是全新的,現在我正在轉換一個小應用程序,雖然有一件事讓我絆倒了。AngularJS - 推送JSON數據(結構正確,但缺少某些東西)

我的目標是向儀表板添加一個模塊,並且如果我硬編碼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

問題是您將對象轉換爲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); 
+0

Got it!非常感謝你。似乎我過於複雜的事情。感謝您的快速回復,所有工作。 :) – tinyBIGideas 2013-02-13 07:56:47

+0

很高興我能幫忙,先生! :) – 2013-02-13 07:58:03

+1

還有一件事 - 我通常使用事件僅用於控制器之間的通信。如果你想實現常規的控制器+服務方案,那麼你最好在聲明控制器內的服務的依賴關係。並從那裏進行明確的呼叫。 – 2013-02-13 07:59:53

相關問題