Javascript 如何避免在controller';什么范围?
使用angularJS 1.3,在下面的代码中Javascript 如何避免在controller';什么范围?,javascript,angularjs,Javascript,Angularjs,使用angularJS 1.3,在下面的代码中 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.20/
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.20/angular.js"></script>
<script type="text/javascript">
var app = angular.module("sample", []);
app.controller("emp", function(){
this.Name = "jag";
this.sal = "4500";
this.getAnnualSal = function(){
return (this.sal) * 12;
}
});
</script>
</head>
<body ng-app="sample">
<div ng-controller="emp as o">
Hello {{o.Name}}, your annual salary is {{o.getAnnualSal()}}
</div>
</body>
</html>
var app=angular.module(“示例”,[]);
应用控制器(“emp”,功能(){
this.Name=“jag”;
这是sal=“4500”;
this.getAnnualSal=函数(){
报税表(本表)*12;
}
});
你好{{o.Name},你的年薪是{{o.getAnnualSal()}
将函数(getAnnualSal
)保留为控制器实例成员看起来很奇怪。
因为,emp
的每个控制器实例都有自己的getAnnualal
emp
控制器实例范围如下所示:
将函数(
getAnnualSal
)作为原型成员进行维护有意义吗?如果是,请提供语法。您可以选择将控制器声明为单独的类。AngularJS没有为此提供特殊语法,因此您可以
function MyController() {
this.Name = "jag";
this.sal = "4500";
}
MyController.prototype.getAnnualSal = function(){
return (this.sal) * 12;
}
var app = angular.module("sample", []);
app.controller("emp", MyController);
如果要使用自定义注入(例如,$scope
,$rootScope
,…),可以:
function MyController($scope) { ... all the former code ... }
...
var app = angular.module("sample", []);
app.controller("emp", ['$scope', MyController]);
有关注射的疑问,请参考官方教程或文档(例如,
$provide
)。唯一的区别是使用匿名函数或命名函数(其行为始终与构造函数相同)。您可能希望实际使用指令而不是唯一的控制器。如果你仔细想想
app.controller("emp", function(){
var vm = this;
this.Name = "jag";
this.sal = "4500";
this.getAnnualSal = function(){
return (vm.sal) * 12;
}
});
很少为控制器声明类。所以不要担心原型。特别是当一次只存在一个实例时。但是是的,你可以自由地去做。@LuisMasuelli我想要它的语法来写答案…浏览器可以循环使用相同的函数,因此,原型可能不会像预期的那样节省…但是
MyController
是在1.3版之前的angularjsI中使用的全局控制器,只是稍微更改了您提供的语法。我显式地将对控制器类的引用传递给.controller调用。它不是全局的,因为全局意味着强制angular在窗口中查看引用,我没有这样做,而是直接传递引用。在第二种方法中,我们是否需要传递$scope
函数getAnnualSal
?我的意思是MyController.prototype.getAnnualSal=function($scope){..}
不,你没有。不,你不应该。特别是如果该函数将在模板中使用:没有任何名称的$scope
对象可用。