2015-05-30 20 views
0

我試圖在使用HomeCtrl從路由模板登錄按鈕的導航中操縱ng-switch。無法弄清楚如何在不使用rootcope或父母破解的情況下訪問不同的$ scope作用域更清晰的方式。請幫忙。

<body ng-app="myApp"> 

    <div class="nav" data-ng-controller="HomeCtrl"> 
     <div ng-switch on="loggedin"> 
      <p ng-switch-when="false">please login</p> 
      <p ng-switch-when="true">Welcome</p> 
     </div> 
    </div> 

    <div class="container" ng-view=""> 
     <!-- partial html --> 
     <button type="button" ng-click="Login()">Login</button> 
     <button type="button" ng-click="Logout()">Logout</button> 
    </div> 

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> 
<script> 

angular.module('myApp', []); 

angular.module('myApp').controller('HomeCtrl', ['$scope', function($scope) { 

    $scope.loggedin = false; 

    $scope.Login = function() { 
    $scope.loggedin = true; 
    }; 
    $scope.Logout = function() { 
    $scope.loggedin = false; 
    }; 
}]); 

</script> 
</body> 
+0

你究竟需要什麼? –

+0

我想製作ng-switch,但是當按鈕位於控制器外部時,代碼不起作用 – user2224893

+0

如果將按鈕放置在控制器外面,代碼將不起作用。您可以在標記上放置data-ng-controller =「HomeCtrl」。 – shreyansh

回答

0

試試這個

<body ng-app="myApp" data-ng-controller="HomeCtrl"> 

,而不是把它放在裏面的div

0

使用嵌套的控制器,並且比你可以訪問父範圍,想

$scope.Login = function() { 
    $scope.$parent.loggedin = true; 
    }; 

    $scope.Logout = function() { 
    $scope.$parent.loggedin = false; 
    }; 

Demo

0

這是使用Controller作爲和vm語法的一個很好的理由。你可以在這裏閱讀:http://www.johnpapa.net/angularjss-controller-as-and-the-vm-variable/

試試這個jsfiddle或更新來源在下面。

<body ng-app="myApp"> 
    <div data-ng-controller="HomeCtrl as vm"> 
     <div class="nav"> 
      <div ng-switch on="vm.loggedin"> 
       <p ng-switch-when="false">please login</p> 
       <p ng-switch-when="true">Welcome</p> 
      </div> 
     </div> 

     <div class="container" ng-view=""> 
      <!-- partial html --> 
      <button type="button" ng-click="vm.Login()">Login</button> 
      <button type="button" ng-click="vm.Logout()">Logout</button> 
     </div> 
    </div> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> 
    <script> 

    angular.module('myApp', []); 

    angular.module('myApp').controller('HomeCtrl', [function() { 
     var vm = this; 
     vm.loggedin = false; 
     console.log('hello'); 
     vm.Login = function() { 
      console.log(vm.loggedin); 
      vm.loggedin = true; 
     }; 
     vm.Logout = function() { 
      console.log(vm.loggedin); 
      vm.loggedin = false; 
     }; 
    }]); 

    </script> 
</body> 
0

一個維護登錄狀態和其他會話數據的服務將是一個合理的解決方案,以避免範圍共享黑客攻擊。

只需將服務注入任何需要訪問的範圍內,並維護服務中的狀態即可。

https://docs.angularjs.org/guide/services

相關問題