从AngularJS中的$ scope。$ on访问控制器范围

时间:2016-12-30 13:26:15

标签: javascript angularjs controller event-handling angularjs-scope

我是Angular的初学者,我在Angular 1.5中遇到了这个简单的问题。我使用rootScope发出一些事件和$ scope。$ on作为组件控制器中的事件监听器(为子组件提供数据)。此控制器包含一些复杂对象,必须由传入的事件数据进行修改。 控制器看起来像这样(只是示例):

function ComponentController($scope){

  this.abc = 5;

  $scope.$on('BOOM!', function(events, args){
    console.log(args);
    this.abc = this.abc + args;  // example of modifying some controllers data
  })
}

问题很明显 - 我无法修改 this.abc 。那么如何在此事件监听器中访问控制器数据并对其进行修改?当我使用 $ scope.abc 时,它可以工作,但它是否有必要(当我在任何地方使用控制器时)?

2 个答案:

答案 0 :(得分:0)

它应该解决你的问题

function ComponentController($scope){
  var vm = this;
  vm.abc = 5;

  $scope.$on('BOOM!', function(events, args){
    console.log(args);
    vm.abc = vm.abc + args;  // example of modifying some controllers data
  })
}

答案 1 :(得分:0)

function ComponentController($scope){
  //Assign this to that, this is in the scope/context of ComponentController.   
  var that = this.
  that.abc = 5;

  $scope.$on('BOOM!', function(events, args){
    //the this used here earlier was in the scope/context of the function to handle this event
    // therefore we use the that variable assigned in the ComponentController.
    console.log(args);
    that.abc = that.abc + args;  // example of modifying some controllers data
  })
}