vm。$ on angularjs中的未定义错误

时间:2015-05-12 02:57:32

标签: angularjs

我正在遵循角度开发的最佳实践风格指南,我似乎无法让这一部分干净利落地工作。

最佳实践风格指南: https://github.com/johnpapa/angular-styleguide

建议通过以下方式声明控制器:

angular
    .module('app')
    .controller('feedController', FeedController);

function feedController(){
   var vm = this; //My $scope variable
}

问题是我正在尝试使用$on添加事件侦听器,但它为vm.$on提供了一个未定义的错误。我找到的一个临时解决方案是通过以下方法将$ scope注入控制器:

FeedController.$inject = ['apiservice', '$scope'];

并致电$scope.$on,但我感觉它现在不一致了。有没有办法以干净的方式使用vm。

您可以在此处查看完整控制器https://github.com/bliitzkrieg/TrailerFeed/blob/master/app/components/feed/FeedController.js

1 个答案:

答案 0 :(得分:5)

this / vm是指控制器的实例,而不是与该控制器关联的范围。

事件仅存在于范围内,因此要使用事件系统,注入$scope以获取对$on可用的控制器范围的引用是正确的。

angular
    .module('app')
    .controller('feedController', FeedController);

function feedController($scope){
   var vm = this; // the instance of the controller
   $scope.on(...) // the controller's scope
}