AngularJS:使用注入声明控制器的不同方法

时间:2016-04-05 19:14:36

标签: angularjs

我见过几种以角度声明控制器的方法。

QS 1

angular.module('MyApp', []);

function MyCtrl($scope) {
    angular.element(document).ready(function () {
        document.getElementById('msg').innerHTML = 'Hello';
    });
}

在上面的代码中没有指定 MyCtrl 是模块名称 MyApp 的一部分。我们是否需要将控制器添加到 MyApp模块?,还是会自动添加到 MyApp模块?

QS 2

var app;

(function () {
    app = angular.module("TestApp", []);
})();

app.controller('TestController', ["$scope", function ($scope) {
    $scope.TestAngularMethod = function () {
        alert('Hello you are calling angular js method.');
    }
}]);

我见过有些人使用[]来注入像[“$ scope”这样的依赖,但是有些人不会使用第3个括号来注入依赖。

看到这个 [“$ scope”它有什么特殊意义吗?

因为在函数中我们总是像这样指定依赖名称 function($ scope)

那么告诉我什么时候第3个括号我们需要用来注入依赖?

还是任何syntactic sugar or personal preference

代码来自http://dotnet-concept.com/Tips/2015/6/5798829/How-to-call-angularJS-function-from-javascript-jquery

学习角度。所以遇到各种不同的代码,这就是为什么试图理解。帮助将不胜感激。感谢

修改

我在同一主题https://stackoverflow.com/a/17954031/508127

上看到了这篇文章

他们说如果我们宣布控制器如下,如果我们缩小,那么可能会出现问题,但不讨论为什么会出现问题。

function MyCtrl($scope) {
    angular.element(document).ready(function () {
        document.getElementById('msg').innerHTML = 'Hello';
    });
}
任何人都可以遮住一些光。感谢

4 个答案:

答案 0 :(得分:3)

请参阅此详细样式指南,其中介绍了最佳做法和不同模式。它将清除混乱。

请参阅此依赖注入部分,该部分与您的问题相关

https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md#manual-annotating-for-dependency-injection

答案 1 :(得分:1)

QS1:是的,您需要像这样订阅控制器,

app.controller('SomeName', MyCtrl);

QS2:在缩小时(缩小引擎将变量名称缩减为短手记法但不更改字符串),缩小引擎会将变量名称缩减为短名称。例如,$scope将缩短为s等。如果您将$ scope保留在[“$ scope”中,因为$ scope现在位于""内,这使得它成为字符串而不是变量名称,因此不会像上面那样转换为短名称,而angular知道文件缩小时“s”的含义。

答案 2 :(得分:1)

我总是建议John Papa Style Guide。它表示您应该使用set()语法:

controller as

并声明为:

<div ng-controller="UserController as userVm">
    {{userVm.***}}
</div>

请注意,它使用的是ViewModel模式。你应该阅读指南。

angular.module('app', []) .controller('UserController', userController); userController.$inject = [**DEPENDENCIES**]; function userController(**DEPENDENCIES**){ var vm = this; } 类似于userController.$inject = [**DEPENDENCIES**]语法,用于防止缩小后的错误(如Aman所述)。

答案 3 :(得分:0)

对于Q1,您应该这样做:

var app=angular.module('MyApp', []);

app.controller("MyBaseCtrl", [MyCtrl]);

function MyCtrl($scope) {
    angular.element(document).ready(function () {
    document.getElementById('msg').innerHTML = 'Hello';
 });

}

angular.module('Mypp', []);

angular.module('MyApp').controller('MyCtrl', function (){
    angular.element(document).ready(function () {
        document.getElementById('msg').innerHTML = 'Hello';

});

对于Q2,有一个结束括号:

app.controller('TestController', ["$scope", function ($scope) {
$scope.TestAngularMethod = function () {
    alert('Hello you are calling angular js method.');
}
}**]**);

我把它包裹在**和**中以强调