2014-03-13 91 views
0

我一直在使用優秀的ngStorage角度插件。

當設置它,你可以聲明連接到localstorage這樣的$scope-node

$scope.$store = $localStorage; 

$scope.$store現在是在所有控制器等

我想從localstorage和訪問刪除一些東西訪問它使用廣播代替。

在我的init我進行:

$scope.taskarr = []; 
$rootScope.$broadcast('taskarrbroad',$scope.taskarr); 

什麼,以便需要addremove$watch這個陣列,沒有提及似乎工作。

這裏,什麼都不會發生

controller('textController', function($scope,$routeParams){ 
    $scope.$watch('taskarrbroad.length', function(){ 
     console.log($scope.taskarr.map(function(task){ 
      return task.content; 
     }).join('\n')); 

    }) 
}) 

在這裏,我可以訪問$scope.taskarr和更新,但視圖不更新。 $scope.$apply()都於事無補(超時是因爲它已經是一個消化內。

controller('stateSwitchController', function($scope, $routeParams, $timeout){ 
    $scope.taskarr = $scope.$store[$routeParams.state].taskarr || []; 
     console.log($scope.taskarr); 
    $timeout(function() { 
     $scope.$apply(); 
    }) 
}). 
+0

「我現在預計它可以添加,刪除和$觀看這個數組」。爲什麼?僅僅因爲你使用'$ broadcast'? –

+0

是的,那是我對廣播的理解(顯然是無效的),我可能會更清楚:爲了添加,刪除和$ watch,需要什麼。 – Himmators

+0

'$ broadcast'用於引發應用程序中使用'$ on'處理的事件。這不是一個存儲機制。 –

回答

1

$broadcast是將事件發送到應用程序的其他部分的方式,當您播送活動,別人不得不聽即使有$on()喜歡的東西:

// Some controller 
$rootScope.$broadcast('my-event', eventData); 

// Some other controller 
$scope.$on('my-event', function() { 
    console.log('my-event fired!') 
}); 

$watch是別的東西,它不是一個事件監聽器本身,它是一種方法來附加一個被調用時,該值的變化,並將該值必須是在功能所以你的手錶應該是這樣的:

$scope.$watch('taskarr.length', function(){ 

}); 

由於您已經在範圍上命名了數組taskarr

相關問題