Angular1.3:在使用 controllerAs 的视图中从标准控制器访问函数?
Angular1.3: Access functions from standard controllers, inside a view which uses controllerAs?
我在主 app.js 文件中定义了一个简单的控制器,它控制 opening/closing 我的导航栏并且在我的应用程序的所有其他视图中可见:
app.js:
.controller('mainController', ['$scope', function($scope){
$scope.menuActive = false;
$scope.toggleMenu = function(){
$scope.menuActive = !$scope.menuActive;
}
}]);
index.html:
<nav class="side-menu" ng-class="{ 'side-menu-open' : menuActive }">
<ul>
<li>LINK1</li>
<li>LINK2</li>
</ul>
</nav>
<!--Other views::.....-->
<div ui-view></div>
我的所有其他视图(使用 controllerAs)都有一个带 ng-click 的按钮,我用它来访问上面的 $scope.toggleMenu() 函数和 ng-class,但是这不起作用,我也没有收到任何错误:
view1.html :
<span class="btn btn-default"
ng-click="toggleMenu()">
MENU
</span>
View1.js:
angular
.module('myApp.view1', [])
.controller('View1Ctrl', [
function(){
................
}
]);
此外,我再次这样做的原因是因为我的导航栏在我的应用程序中一直存在。这是否有违最佳实践?
如果您使用 .. controller as ..
语法,请确保您将它用于所有控制器。不要挑剔。
接下来,使用语法时,不需要注入$scope
对象。您需要改为使用 this
变量,并将通常与 $scope
对象关联的任何属性或函数附加到 this
对象。
因此,
$scope.toggleMenu = function(){
$scope.menuActive = !$scope.menuActive;
}
变成
this.toggleMenu = function(){
this.menuActive = !this.menuActive;
}
最后,在您看来,一定要将每个表达式与控制器相关联。
<div ng-controller="mainController as main">
<nav class="side-menu" ng-class="{ 'side-menu-open' : main.menuActive }">
<ul>
<li>LINK1</li>
<li>LINK2</li>
</ul>
</nav>
<div ui-view>
<!-- Assuming that the following gets compiled to ui-view -->
<span class="btn btn-default" ng-click="main.toggleMenu()">
MENU
</span>
</div>
</div>
您可以获得一些关于使用 controller as
语法的进一步提示 here
我在主 app.js 文件中定义了一个简单的控制器,它控制 opening/closing 我的导航栏并且在我的应用程序的所有其他视图中可见:
app.js:
.controller('mainController', ['$scope', function($scope){
$scope.menuActive = false;
$scope.toggleMenu = function(){
$scope.menuActive = !$scope.menuActive;
}
}]);
index.html:
<nav class="side-menu" ng-class="{ 'side-menu-open' : menuActive }">
<ul>
<li>LINK1</li>
<li>LINK2</li>
</ul>
</nav>
<!--Other views::.....-->
<div ui-view></div>
我的所有其他视图(使用 controllerAs)都有一个带 ng-click 的按钮,我用它来访问上面的 $scope.toggleMenu() 函数和 ng-class,但是这不起作用,我也没有收到任何错误:
view1.html :
<span class="btn btn-default"
ng-click="toggleMenu()">
MENU
</span>
View1.js:
angular
.module('myApp.view1', [])
.controller('View1Ctrl', [
function(){
................
}
]);
此外,我再次这样做的原因是因为我的导航栏在我的应用程序中一直存在。这是否有违最佳实践?
如果您使用 .. controller as ..
语法,请确保您将它用于所有控制器。不要挑剔。
接下来,使用语法时,不需要注入$scope
对象。您需要改为使用 this
变量,并将通常与 $scope
对象关联的任何属性或函数附加到 this
对象。
因此,
$scope.toggleMenu = function(){
$scope.menuActive = !$scope.menuActive;
}
变成
this.toggleMenu = function(){
this.menuActive = !this.menuActive;
}
最后,在您看来,一定要将每个表达式与控制器相关联。
<div ng-controller="mainController as main">
<nav class="side-menu" ng-class="{ 'side-menu-open' : main.menuActive }">
<ul>
<li>LINK1</li>
<li>LINK2</li>
</ul>
</nav>
<div ui-view>
<!-- Assuming that the following gets compiled to ui-view -->
<span class="btn btn-default" ng-click="main.toggleMenu()">
MENU
</span>
</div>
</div>
您可以获得一些关于使用 controller as
语法的进一步提示 here