2016-06-30 2 views
0

AngularJS $ broadcastイベントを使用して、dataactionを2つのコントローラで渡そうとしています。しかし、私は値(参照ではない)としてデータを渡すことに問題があります。

私がこれまで行ってきたことは、私はその後、私は上のイベントのリスナを追加ショッピングcart.controller.js

//function inside shopping-cart.controller.js 
function sendCartPreview() { 
    var shoppingCart = $scope.shoppingCart; 
    $rootScope.$broadcast('sendCartPreview', shoppingCart); 
} 

shoppingCartの対象とsendCartPreviewイベントをブロードキャスト機能を作成した最初のものですショッピングカートデータを取得し、コントローラ内部sendCartPreview関数にデータ値を渡す別のコントローラが

//function inside chat.controller.js 
$scope.$on("sendCartPreview", function(event, message){ 
    sendCartPreview(message); 
}) 

基本的sendCartPreview関数は、オブジェクトデータを受信し、アレイに追加しメッセージの。 $scope.shoppingCart値の変更は、vm.arrayOfMessage内部の値は、それぞれの変化に応じて変更するたびに、私が直面してる

function sendCartPreview(shopping_cart) { 
    //some logic here and push the data to an array 
    vm.arrayOfMessage.push(shopping_cart); 
} 

問題があります。私が平均して達成しようとしているのは、データを(参照ではなく)値として渡すことで、毎回$ scope.shoppingCartの値が変更されると、vm.arrayOfMessage内のデータには影響しません。どのように達成するのですか?親切にこれであなたの助けが必要です、どんな種類の助けても感謝します、ありがとう!

+0

使用$ rootScope $適用()または$スコープ$(適用);。。 –

答えて

1

かなり簡単ザッツsendCartPreview(angular.copy(message));

+0

ありがとう!それは実際に問題を解決しました:) –

1

のような深いコピー呼び出しを行います。私はあなたもjqueryを持っていると仮定します。

var cart = jQuery.extend(true, {}, shoppingCart); 

&ブロードキャストカート。

+0

私は、代わりにangular.copyを使うことを好むと思います。とにかく助けてくれてありがとう! –

関連する問題