关键词“this”在角度js控制器内

时间:2013-02-27 22:02:13

标签: angularjs

从这个网址https://github.com/angular/angular-seed/blob/master/app/js/app.js,我得到了一个如下控制器。

function WineListCtrl(Wine) {
    this.wines = Wine.query();
}

到目前为止,我在angular中所做的是定义一个带有$ scope注入的控制器。所以我试过,将上面的控制器更改为

function WineListCtrl(Wine, $scope) {
    console.log($scope, this)
    this.wines = Wine.query();
}

但是这会出错:错误:'$scope'的未知提供商。

我在这里有三个问题:

  1. 为什么没有注入控制器的$scope
  2. this中的WineListCtrl表示$scope
  3. Angular中的大多数错误都是“未知提供商”格式 为XXXX'。如果萤火虫这么说,我该怎么办?

2 个答案:

答案 0 :(得分:1)

  1. 以这种形式编写控制器时,应该为它们注入依赖关系,如下所示:

    function WineListCtrl(Wine, $scope) { console.log($scope, this) this.wines = Wine.query(); } WineListCtrl.$inject = ['Wine', '$scope'];

  2. this$scope不同。 $ scope是$rootScope.$new()

  3. 创建的an angular-specific object
  4. 参见#1

答案 1 :(得分:1)

  1. 您正在使用“推断的依赖项”(请参阅​​DI page)哪个应该可以正常工作,除非您缩小或混淆JavaScript。

  2. 请参阅my answer此问题:'this' vs $scope in AngularJS controllers

  3. 当您忘记在某处使用ng-app或忘记使用相应的模块初始化您的应用时,通常会发生“未知提供商”错误: