当涉及到语法时,我有点困惑,controller as
因为我以前从未使用过它。我想知道解决这个问题的正确方法。搜索时无法找到类似的问题。
我有一个菜单和一个切换菜单的按钮。菜单有自己的范围,按钮有另一个,因为它们存在于两个单独的文件和容器中。
当我单击按钮时,它只会更新nav.isActive
按钮范围内的。我创建了一个用于存储状态的服务,当我想到它时我不应该这样做.. 我应该吗?因为观察该值是否发生变化的唯一方法是使用观察者,这需要我使用,$scope
因为this
没有该$watch
功能,但是,我想尽可能避免这种情况,因为它会影响性能,即在这个项目中很重要。
controller as
使用语法时从另一个“范围”更新“范围”变量的正确方法是什么?
控制器:
nav.controller('NavCtrl', ['navState', function(navState) {
var nav = this;
nav.menu = [
{icon: 'color_lens', href: ''},
{icon: 'color_lens', href: 'about'},
{icon: 'color_lens', href: 'contact'},
{icon: 'color_lens', href: 'logout'},
{icon: 'color_lens', href: 'faq'}
];
nav.toggleMenu = function() {
nav.isActive = navState.checkState();
}
}]);
将值从一个范围传递到另一个范围的服务:
nav.service('navState', [function() {
var isActive = false;
this.checkState = function() {
isActive = !isActive;
return !isActive;
}
}]);
菜单标记(menu.html):
<nav class="si-wrapper si-dark" ng-controller="NavCtrl as nav" ng-class="{active: nav.isActive}">
<ul class="si-list">
<li class="si-item" ng-repeat="item in nav.menu">
<a href="#/{{item.href}}">
<div class="si-inner-item">
<i class="material-icons md-36" ng-bind="item.icon"></i>
</div>
</a>
</li>
</ul>
<h1>{{nav.isActive}}</h1> <!-- This doesn't change -->
</nav>
切换菜单的按钮(header.html):
<div ng-controller="NavCtrl as nav">
<button ng-click="nav.toggleMenu()">Toggle</button>
<span>{{nav.isActive}}</span> <!-- This updates however -->
</div>