javascript - 当 AngularJS 返回 $http 结果时如何隐藏或显示菜单项

标签 javascript html angularjs angularjs-http

我有一个菜单和一个登录页面:)。
我想更改菜单项,但目前登录后无法刷新菜单。
如果登录成功,应显示一些菜单项或应添加特殊用户菜单项。
但我做不到。

最佳答案

1) 如果您的菜单项包含与 $http 调用在同一范围内,您可以编写以下代码:

function FirstController($scope, $http){

   $scope.showFirstItem = false;

   $scope.clickAction = function(){
       $http.get('/someUrl').
          success(function(data, status, headers, config) {
             $scope.showFirstItem = true; //if success - show it
          }).
          error(function(data, status, headers, config) {
             $scope.showFirstItem = false;
          });
   }
}

<div ng-controller="FirstController">

   <button ng-click="clickAction()">Show the first item</button>

   <ul>
      <li ng-show="showFirstItem">First item</li>
      <li>Second Item</li>
   </ul>
</div>

2) 如果 $http 调用在另一个 Controller 中触发,您可以为其创建共享服务。您可以将一些值/操作从一个 Controller 传递到另一个 Controller 。

例如:

angular.module("yourAppName", []).factory("mySharedService", function($rootScope){

    var mySharedService = {};

    mySharedService.showFirstItem = false;

    var httpCall = function() {
       $http.get('/someUrl').
          success(function(data, status, headers, config) {
             mySharedService.showFirstItem = true;
          }).
          error(function(data, status, headers, config) {
             mySharedService.showFirstItem = false;
          });
    };

    mySharedService.httpCall= function(){
        httpCall();
        $rootScope.$broadcast('httpCallFired');
    }

    return mySharedService; 
});

然后将其注入(inject)到任何 Controller 中。

function FirstController($scope, mySharedService){

   $scope.showFirstItem = false;

   $scope.$on('httpCallFired', function () {
      $scope.showFirstItem = mySharedService.showFirstItem;
   });
}

function SecondController($scope, mySharedService) {
   $scope.clickAction = function() {
      mySharedService.httpCall();
   };
}

<div ng-controller="FirstController">       
   <ul>
      <li ng-show="showItem">First item</li>
      <li>Second Item</li>
   </ul>
</div>

<div ng-controller="SecondController">
   <button ng-click="clickAction()">Show the first item</button>
</div>

关于javascript - 当 AngularJS 返回 $http 结果时如何隐藏或显示菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26737675/

相关文章:

html - 输入 :focus to change an other div

angularjs - Angular js 指令中的后链接与预链接

angularjs - AngularJS 中的条件 ng-include

javascript - 如何使用 eslint 验证 VSCode 中的 Adob​​e Extendscript (.jsx) 文件

javascript - 如何授权自定义功能使用 Google 日历?

javascript - 用户重新加载页面后 HTML/JQuery 重定向

javascript - JS 滚动在我的网站上似乎不起作用

javascript - 当更改事件有界的对象时,JQuery 的 .next() 似乎不起作用

javascript - 无法在 js 中使用 DOM

javascript - 如何使用http get方法(Angular js)按顺序(顺序)发送查询参数