我正在遵循角度开发的最佳实践风格指南,我似乎无法让这一部分干净利落地工作。
最佳实践风格指南: 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
答案 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
}