要让$ broadcast播放,我需要做什么?

时间:2014-03-13 13:26:47

标签: angularjs

我一直在使用优秀的ngStorage插件来处理角度。

设置时,您可以声明$scope-node连接到localstorage,如下所示:

$scope.$store = $localStorage;
现在可以在所有控制器等中访问

$scope.$store

我想从localstorage中删除一些内容,然后使用广播来访问它。

在我的初学者中我表演过:

$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();
    })
}).

1 个答案:

答案 0 :(得分: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

相关问题