我用angularjs打字稿写了一个小应用程序。现在我想在指令内触发一个点击 女巫是用 ng-switch 和 ng-include 构建的。问题是ng-click不会触发,如果我打印出一个值,每件事都可以正常工作。
控制器:
export class MenuController {
private _scope: any;
private _location: any;
static $inject = ['$scope', '$location'];
constructor($scope, $location) {
this._scope = $scope;
this._location = $location;
if(!window.localStorage.getItem("token")) {
$location.path("/home");
}
this.logout = this.logout;
}
public logout(): void {
window.localStorage.removeItem("token");
this._location.path("/confirmRegistration");
}
public isAuthenticated(): boolean {
return localStorage.getItem("token") != undefined;
};
}
angular
.module('app.menu')
.controller('MenuController', MenuController);
模块:
angular.module('app.menu', [
'app.core'
]).directive("osMenu", function() {
return {
restrict: "E",
controller: "MenuController as vm",
templateUrl: "js/menu/menu.html"
};
});
带有开关的 Html,包括:
<ul id="nav">
<div ng-switch on="vm.isAuthenticated()">
<div ng-switch-when="true">
<div ng-include="'js/menu/membermenu.html'"></div>
</div>
<div ng-switch-when="false">
<div ng-include="'js/menu/nonmembermenu.html'"></div>
</div>
</div>
</ul>
点击模板:
<a href="#" ng-click="vm.logout()">Logout {{vm.isAuthenticated()}}</a>
{{vm.isAuthenticated()}} 将正确打印出来,但 vm.logout() 未触发。
有什么想法吗?
感谢您与巴塔朗的提示,巴萨拉特。
范围如下所示:与巴塔朗的示波器
但是如何访问我的 HomeController 实例呢? $parent.$parent.vm.logout() 也不起作用。
问题是ng-click不会触发,如果我打印出一个值,每件事都可以正常工作。
因为你有一个ng-switch
ng-include
以及其中的vm
,所以怀疑控制器继承让你措手不及,或者vm
不是你认为的vm
(不是正确的控制器)。
调试
使用带有 batarang 的开发人员工具来检查 html 元素的范围。