2016-08-01 79 views
2

在Angular Material Starter App中,定义了'UserController'而不注入$ scope服务。

所以在构造函数,变量被创建为这个对象的属性:

function UserController(userService, $mdSidenav, $mdBottomSheet, $timeout, $log) 
{ 
    var self = this; 

    self.selected  = null; 
    self.users  = [ ]; 
    self.selectUser = selectUser; 
    self.toggleList = toggleUsersList; 
    self.makeContact = makeContact; 

但随后,在self.selectUser功能,数组self.users的值作为$范围引用。用户

function selectUser (user) { 
    self.selected = angular.isNumber(user) ? $scope.users[user] : user; 
} 

即使$ scope从未被注入,它也能正常工作。如果我将其更改为self.users,也适用。

$ scope是否隐式注入到每个Angular控制器中?它是否会在控制器构造函数中自动镜像此对象?

发生了什么事?

下面的代码https://github.com/angular/material-start

+0

您是否在代码的其他位置设置了$ scope.users?如果条件为真,代码是否会触及? – joncodo

+0

您是否尝试过运行该应用程序? – user1620220

+0

我怀疑你的代码不会给出像“ReferenceError:'$ scope'没有定义的消息”... – developer033

回答

1

我只是克隆回购和测试它不工作,你在说什么。$范围没有定义的错误。你必须注入构造函数来工作 不,它不是自动注入的,你需要传递$ scope作为参数给控制器来使用它,否则你应该会得到错误$ scope是未定义的,它可以像你在selectedUser函数中给出的条件,它永远不会达到$范围,以便对此作出反应。

function UserController(userService, $mdSidenav, $mdBottomSheet, $timeout, $log , $scope) 
    { 
} 
function selectUser (user) { 
     //try to change this line and run code and select a user you will get error 
     self.selected = angular.isNumber(1) ? $scope.users[user] : user; 
     console.log($scope) //$scope is undefine 
    } 
+0

我认为你误解了这个问题... – developer033

+0

你能分享整个代码。没有注射范围是不可能的。我想我跟着你的问题。 –

+0

我不是问题的主人。我的意思是,提问者问:*“为什么代码工作,如果我不在任何地方注入$ scope?” – developer033

0

这看起来像代码中的缺陷。该意见提出了userService参数最初被命名为$scope

/** 
    * Main Controller for the Angular Material Starter App 
    * @param $scope 
    * @param $mdSidenav 
    * @param avatarsService 
    * @constructor 
    */ 
function UserController(userService, $mdSidenav, $mdBottomSheet, $timeout, $log) { ... 
0

JavaScript是不是编译语言,但一种解释之一。这意味着代码只能运行程序需要的部分。

看到这个示例代码:

if(true){ 
    a = 12 
}else{ 
    hkjkjdkjhkjsfdjhsdf87678 
} 

注意:此代码不会抛出任何类型的错误作为代码永远不会打。

在你的例子中,这看起来像是从未命中的代码中的错误。我不知道为什么你没有得到参考错误,但它必须注入。

此评论:https://github.com/angular/material-start/blob/master/app/src/users/UserController.js#L12

使我相信,这是有过,但在错误被删除。

但是,该文件的第一次提交也缺少$ scope参数。你可以拆分if块并验证$ scope是否实际被调用?

我也浏览了整个回购和历史。看起来这是一个错误。一个很好的机会让你创建一个拉请求并贡献开源!

1

代码工作,因为在

function selectUser (user) { 
    self.selected = angular.isNumber(user) ? $scope.users[user] : user; 
} 

的情况从来没有计算结果为true。在HTML ng-click指令中传递给selectUser的参数不是一个数字,而是一个对象。

因此赋值给self.selected的值永远不会是$ scope.users(当我登录它时,我得到参考错误),而是用户对象。

相关问题