我正在使用像这样的控制器
.controller("somename",function($scope,$http){
//some get function to fetch data
$scope.data = dataReturned;
$scope.$apply();
});
工作正常。然后我想在阅读johnpapa's blog之后使用函数并将其更改为下面的函数
.controller("somename",someNameController);
function someNameController(){
var someName = this;
//some get function to fetch data
this.data = dataReturned;
this.$apply();
};
但这不起作用,因为this.$apply
不是函数
当我添加$ scope(不推荐)时,它开始工作
.controller("somename",someNameController);
function someNameController($scope){
var someName = this;
//some get function to fetch data
$scope.data = dataReturned;
$scope.$apply();
};
是否可以消除$scope
中function someNameController($scope)
的传递?
答案 0 :(得分:2)
为什么要跳过$ scope?为了获得控制器中所有方法和变量的引用,你必须使用$ scope .thanks
答案 1 :(得分:1)
在缩小过程中,最简单的方法是将控制器作为函数处理并注入依赖项,而不会破坏任何内容。
(function(){
'use strict';
var MainCtrl = function($scope){
// Do something
};
MainCtrl.$inject = [
'$scope'
];
app.controller('MainCtrl', MainCtrl);
})();
答案 2 :(得分:1)
您正在关注John Papa的风格指南,并使用所谓的 controller-as 语法。
controller-as 语法允许在视图中使用函数实例,因此没有必要注入$scope
以使数据可用于视图。一个简单的this.data = mydata
就足够了。
但是,当使用$scope
中提供的特殊功能时,$scope
仍然必须注入控制器功能。 $apply()
,$watch()
等通常是其中的一部分。 This article正好解释了这一点。
关于控制器作为John Papa的风格指南(强调我的)的语法:
有助于避免在控制器中使用
$scope
方法的诱惑 当它可能更好地避免它们或将方法移动到 工厂,并从控制器引用它们。 考虑使用$scope
仅在需要时在控制器中。例如,发布时和 使用$emit
,$broadcast
或$on
订阅活动时请考虑移动 这些用于工厂并从控制器调用。
简短的回答是否 - 如果没有注入$scope
或其他具有$scope
的服务作为依赖关系,则无法使用$scope
方法