【问题标题】:AngularJS single controller, multiple $http.get requestsAngularJS 单个控制器,多个 $http.get 请求
【发布时间】:2015-12-20 12:09:12
【问题描述】:

我期待开发一个 AngularJS 应用程序,我想知道是否可以使用单个控制器发送多个 $http.get 请求,每次发送到不同的 URL,具体取决于调用的模板。

例子:

App.js

  .state('app.grocery', {
    url: '/grocery',
    views: {
      'menuContent': {
        templateUrl: 'templates/grocery.html',
        controller: 'MasterCtrl'
      }
    }
  })

 .state('app.beverages', {
    url: '/beverages',
    views: {
      'menuContent': {
        templateUrl: 'templates/beverages.html',
        controller: 'MasterCtrl'
      }
    }
  })

在我的 Controller.js 中,我希望首先捕获被调用的 templateURL 并基于该设置 $http.get URL。假设如果 templateURL 是 templates/grocery.html,则 $http.get URL 将是“ xyz.com/grocery.json”,如果 templateURL 是 templates/beverages.html,则 $http.get URL 将是“xyz.com/beverages.json”

【问题讨论】:

    标签: json angularjs


    【解决方案1】:

    您必须检查控制器中的哪个页面名称

    .controller('MasterCtrl', function($scope, $stateParams,$state) 
    {
        if($state.current.name==='grocery')
        {
            //call grocery $http.get() for grocery
        }
        else
        {
            //call beverages $http.get() for beverages
        }
    })
    

    【讨论】:

      【解决方案2】:

      您可以在您的状态中设置您的jsonName,并使用$state.current 在您的控制器中获取它,这将具有jsonName 属性,其中包含您想要的信息。

      代码

      .state('app.grocery', {
          url: '/grocery',
          views: {
            'menuContent': {
              templateUrl: 'templates/grocery.html',
              controller: 'MasterCtrl'
            }
          },
          jsonName: 'grocery'
      })
      .state('app.beverages', {
          url: '/beverages',
          views: {
            'menuContent': {
              templateUrl: 'templates/beverages.html',
              controller: 'MasterCtrl'
            }
          },
          jsonName: 'beverages'
      })
      

      控制器

      app.controller('MasterCtrl', function($state, $scope, $http){
      
         //$state.current.jsonName will provide current json name
         $http.get('xyz.com/'+ $state.current.jsonName +'.json')
         .succcess(function(){
            //code when ajax success
         });
      
      })
      

      【讨论】:

        【解决方案3】:

        当然可以 - @Paresh 的上述回答是正确的。

        但是,在我看来,您不应该这样做。您的方法是这样的,也许是因为您不喜欢有很多文件或控制器。但无论出于何种原因,拥有一个单独的控制器将帮助您拥有一小部分清晰的代码,每个代码负责一种类型的操作。

        如果您想要实现单元测试,或者像您要求的那样有很多变体,或者甚至有复杂的逻辑:按照您将要采用的方式实现它将需要如此多的“IF”逻辑块一个无处不在。

        如果您决定要决定“grocery”应该成为“grocery_main”,那么将需要大量“查找和替换”,如果您错过了一个,您的代码中就会出现错误很容易。

        这些是学习良好编码风格的基础。如果您可能并且有兴趣学习,我建议您继续接受我的建议。

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 2013-06-06
          • 2019-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-08
          • 1970-01-01
          • 2015-07-26
          • 2020-06-12
          相关资源
          最近更新 更多