ng-click not fire in ng-switch and ng-inclide



我用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 元素的范围。

最新更新