我见过几种以角度声明控制器的方法。
angular.module('MyApp', []);
function MyCtrl($scope) {
angular.element(document).ready(function () {
document.getElementById('msg').innerHTML = 'Hello';
});
}
在上面的代码中没有指定 MyCtrl 是模块名称 MyApp 的一部分。我们是否需要将控制器添加到 MyApp模块?,还是会自动添加到 MyApp模块?
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';
});
}
任何人都可以遮住一些光。感谢
答案 0 :(得分:3)
请参阅此详细样式指南,其中介绍了最佳做法和不同模式。它将清除混乱。
请参阅此依赖注入部分,该部分与您的问题相关
答案 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.');
}
}**]**);
我把它包裹在**和**中以强调