javascript - 如何避免函数作为 Controller 范围内的实例成员?

标签 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/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>

将 function(getAnnualSal) 保留为 Controller 实例成员看起来很奇怪。 因为,emp 的每个 Controller 实例都有自己的 getAnnualSal

emp Controller 实例范围如下所示:

enter image description here

将函数(getAnnualSal)维护为原型(prototype)成员是否有意义?如果是,请提供语法。

最佳答案

您的替代方法是将 Controller 声明为单独的类。 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);

如果您想使用自定义注入(inject)(例如 $scope$rootScope...),您可以:

function MyController($scope) { ... all the former code ... }
...
var app = angular.module("sample", []);
app.controller("emp", ['$scope', MyController]);

有关注入(inject)的疑问,请引用官方教程或文档(例如$provide)。唯一的区别是使用匿名函数或命名函数(始终充当构造函数)。

关于javascript - 如何避免函数作为 Controller 范围内的实例成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36067726/

相关文章:

Angularjs - 单个与多个 ng-app?

javascript - Angularjs 的 $http.get 在 IE11 中只执行一次

javascript - Angular js 中出现意外错误

javascript - 动态更改的脚本源不起作用

angularjs - 单击类别链接时过滤项目列表

javascript - 特殊字符显示在由 AWS 构建的 Python Dict 中,并通过 django View 传递给 js

javascript - 具有如此广泛的值范围的 LSTM 模型(使用 Tensorflow)标准化数据的最佳方法是什么?

internet-explorer-8 - 为什么 ng-class ="ng-app"会破坏 AngularJS?

javascript - JvectorMap trim 数据输出

javascript - 正在处理的链接——使用 CSS 样式还是使用 JavaScript?