控制器的指令和实例
Directive and instance of the controller
我目前正在尝试理解我找到的一段代码,其中有一部分让我很难过
I 指令是这样声明的:
(function () {
angular
.module('meanApp')
.directive('navigation', navigation);
function navigation () {
console.log("enters directive");
return {
restrict: 'EA',
templateUrl: '/common/directives/navigation/navigation.template.html',
controller: 'navigationCtrl as navvm'
};
}
})();
控制器:
(function () {
angular
.module('meanApp')
.controller('navigationCtrl', navigationCtrl);
navigationCtrl.$inject = ['$location','authentication'];
function navigationCtrl($location, authentication) {
console.log("enters navigation controller")
var vm = this;
vm.isLoggedIn = authentication.isLoggedIn();
vm.currentUser = authentication.currentUser();
}
})();
观点:
<div class="navbar navbar-default">
<div class="container">
<div id="navbar-main">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li ng-hide="navvm.isLoggedIn"><a href="login">Sign in</a></li>
<li ng-show="navvm.isLoggedIn"><a href="profile">{{ navvm.currentUser.name }}</a></li>
</ul>
</div>
</div>
</div>
我不明白的是:
为什么我们使用 'nvvm' 变量,而我们在控制器中使用的控制器实例名为 'vm'。
在视图中,而不是 navvm.currentUser.name
,我会选择简单地使用 vm.currentUser.name
感谢您帮助我阐明这个细节
如指令中所述:
controller: 'navigationCtrl as navvm'
可以使用您认为的 navm
别名引用 navigationCtrl
,解释 navvm.currentUser.name
。
如果这让您很困扰,只需将控制器更换为 alias
:
controller: 'navigationCtrl as vm'
随心所欲地使用它:vm.currentUser.name
。
请注意,此 alias
允许您使用 this
将数据绑定到 controller
,从而摆脱 $scope
关键字。
nvvm是控制器名称的别名,所以可以用nvvm代替navigationCtrl
vm 是控制器内部的一个变量,因此无法从页面访问。
我目前正在尝试理解我找到的一段代码,其中有一部分让我很难过
I 指令是这样声明的:
(function () {
angular
.module('meanApp')
.directive('navigation', navigation);
function navigation () {
console.log("enters directive");
return {
restrict: 'EA',
templateUrl: '/common/directives/navigation/navigation.template.html',
controller: 'navigationCtrl as navvm'
};
}
})();
控制器:
(function () {
angular
.module('meanApp')
.controller('navigationCtrl', navigationCtrl);
navigationCtrl.$inject = ['$location','authentication'];
function navigationCtrl($location, authentication) {
console.log("enters navigation controller")
var vm = this;
vm.isLoggedIn = authentication.isLoggedIn();
vm.currentUser = authentication.currentUser();
}
})();
观点:
<div class="navbar navbar-default">
<div class="container">
<div id="navbar-main">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li ng-hide="navvm.isLoggedIn"><a href="login">Sign in</a></li>
<li ng-show="navvm.isLoggedIn"><a href="profile">{{ navvm.currentUser.name }}</a></li>
</ul>
</div>
</div>
</div>
我不明白的是:
为什么我们使用 'nvvm' 变量,而我们在控制器中使用的控制器实例名为 'vm'。
在视图中,而不是 navvm.currentUser.name
,我会选择简单地使用 vm.currentUser.name
感谢您帮助我阐明这个细节
如指令中所述:
controller: 'navigationCtrl as navvm'
可以使用您认为的 navm
别名引用 navigationCtrl
,解释 navvm.currentUser.name
。
如果这让您很困扰,只需将控制器更换为 alias
:
controller: 'navigationCtrl as vm'
随心所欲地使用它:vm.currentUser.name
。
请注意,此 alias
允许您使用 this
将数据绑定到 controller
,从而摆脱 $scope
关键字。
nvvm是控制器名称的别名,所以可以用nvvm代替navigationCtrl
vm 是控制器内部的一个变量,因此无法从页面访问。