$ broadcast上的变量访问问题和angularjs中的$ on事件

时间:2017-03-22 11:11:57

标签: angularjs

我有一个$ cope用于另一个控制器。所以我用$ broadcast事件来分享我的价值。该方法工作正常,我可以将值分配给$ broadcast变量,该变量是$ broadcast。但问题来自她。我无法在$ on事件之外绑定或访问$ scope的指定值。

修改1:

我有同一组事件在同一个模块中正常工作。但是这个没有。

app.controller('ctrl0',function($scope,$rootScope) {
    $rootScope.$broadcast($state.current.controller, { stateValue: $scope.data });
});

app.controller('ctrl1',function($scope,$rootScope) {
    $rootScope.$on($state.current.controller, function (event, args) {
        // This $scope binds in my view
        $scope.mylabel = args.data; 
    });

    $rootScope.$broadcast('myvariable', { search: $scope.searchvalue });
});

app.controller('ctrl2',function($scope,$rootScope) {
    $rootScope.$on('myvariable', function (event, args) {
        $scope.localscope = args.search;
        /* This prints the value in the console.
           This does not bind in my view. */
        console.log($scope.localscope);  
    });
    // This prints undefined in the console
    console.log($scope.localscope); 
});

我也试过使用$ apply()函数,但我没有得到结果。

1 个答案:

答案 0 :(得分:0)

当控制器启动时出现问题,但尚未声明您在$ on中分配的变量,并且它的值尚未更改,因此这将修复&#39 ;错误':

app.controller('ctrl2', function($scope, $rootScope) {
  $scope.localscope = null;
  $rootScope.$on('myvariable', function (event, args) {
    $scope.localscope = args.search;
    console.log($scope.localscope);  // This prints the value in the console
  });
  console.log($scope.localscope); // should print 'null'
});

所以现在当你打印出第二个console.log时,它不会被定义,它将是' null'。如果事件现在发生,它仍然会按照您的想象设置该变量,并将其记录到控制台。