2015-07-19 74 views
1

工作,我有这个导航:AngularJS NG-点击不与配置的控制器

    <ul class="dropdown-menu m-t-xs compact" style="float:right !important;right: 0px;"> 
         <li ng-hide="$state.includes('root.projects')"><a ui-sref="portal.user_settings"><span class="icon glyphicon glyphicon-user"></span>User Settings</a></li> 
         <li ng-show="$state.includes('root.projects')"><a ui-sref="root.user_settings"><span class="icon glyphicon glyphicon-user"></span>User Settings</a></li> 
         <li class="divider"></li> 
         <li ng-controller="LoginCtrl"><a href="" ng-click="logout"><span class="icon glyphicon glyphicon-log-out"></span>Logout</a></li> 
        </ul> 

但是,当我点击链接logout,什么都不会发生。

这里是我的控制器:

'use strict'; 

function LoginCtrl($scope, Authentication, $window, $cookies, $http, $location) { 
    var _self = this; 
    _self.loginProcessing = false; //This is a flag for showing the loader animation while the wait for the login response. 
    _self.error = null; 

    _self.login = function(vm) { //Defines the login function as a variable on the LoginCtrl 
     _self.loginProcessing = true; 
     Authentication.Login(vm.email, vm.password).then(function(data){ 
      _self.loginProcessing = false; 

      $window.sessionStorage['currentUser'] = JSON.stringify(data); 
      $location.path("/projects"); 
     }).catch(function(err) { 
      _self.error = true; 
      _self.loginProcessing = false; 
     }); 
    } 

    _self.logout = function() { 
     alert("CLICKED"); 
     // Authentication.logout().then(function() { 
     // $window.sessionStorage['currentUser'] = null; 
     // 
     // $location.path("/login"); 
     // }); 
    } 
} 

angular.module('controllers').controller('LoginCtrl', LoginCtrl); 

这里是配置的路由:

.state('logout',{ 
    url: "/logout", 
    controller: "LoginCtrl", 
    templateUrl: 'views/logout.html', 
}) 

我100%新AngularJS,所以请原谅我的无知。谢谢!

+0

你是治疗的观点变量,如果它们没有被配置为$范围$范围,但控制器的一部分但是对于'controllerAs'来说。如何分配控制器来查看? – charlietfl

+0

我在路由中将''controller'选项更改为'LoginCtrl'作为LoginCtrl',但它仍然不起作用。我不确定这是什么意思 – dennismonsewicz

+1

这意味着你需要前缀所有控制器变量的视图与该别名和一个点 – charlietfl

回答

1

您使用的视图配置为$范围,,但你的控制器使用控制器的别名,, 所以你可以用这条线,使按钮工作

<li ng-controller="LoginCtrl as loginCtrl"><a href="" ng-click="loginCtrl.logout()"><span class="icon glyphicon glyphicon-log-out"></span>Logout</a></li> 

UPDATE:通知,在ngClick你把表达式不是函数,所以你把注销()不仅注销

+0

谢谢你,工作!不过,我很困惑。在这里做控制器别名与在路由配置中做什么有什么不同? – dennismonsewicz

+0

已经在路由中分配了控制器...将以这种方式运行2个实例 – charlietfl

+0

我认为只有当他导航到/注销时,路由实例才会初始化,但是在这里他在导航栏的下拉菜单中初始化控制器,不仅在/登出 ! –