javascript - AngularJs每条路由调用http的正确方法

标签 javascript angularjs

我对 AngularJs 非常陌生,我正在尝试使用不同的 $http 请求创建多个路由。当路线更改并且页面内容稍后显示时,我的问题就开始了。 我以某种方式弄清楚了,但我认为这不是正确的方式。 希望有人告诉我是否有更好的方法。

注意: AngularJs 版本:1.6 |使用用户界面路由器

ma​​in.js

var asTwl = angular.module('asTwl', ['ui.router']);

asTwl.controller('generals', function($scope, $http, $timeout){

    $scope.pageLoader = false;

    $scope.getPageData = function(path, postData, obj){
        $scope.pageLoader = true; 
        $http({
            method: 'post',
            url: path,
            data: postData,
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
        })
        .then(function(response) {
            if (response.data) {
                $scope.data[obj] = JSON.parse(response.data);
                $timeout(function(){
                    $scope.pageLoader = false;
                }, 100)
             }
        })
        .catch(function(e) {
            new Error('Error: ', e);
            throw e;
        })
    }
});

asTwl.controller('homePage', function($scope, $http){   
    var postData = {
      //data...
    }
    $scope.getPageData('path', postData, 'home')
})

asTwl.controller('singlePage', function($scope, $http, $stateParams){   
    var postData = $stateParams;
    $scope.getPageData('path', postData, 'page')
})

asTwl.controller('categoryPage', function($scope, $http, $stateParams){   
    var postData = $stateParams;
    $scope.getPageData('path', postData, 'category')
})

asTwl.config(function($stateProvider, $urlRouterProvider, $locationProvider){

    $urlRouterProvider.otherwise('/');

    $stateProvider
    .state('home', {
        url: '/',
        templateUrl : 'templates/pages/home.html',
        controller : 'homePage'
    })
    .state('info', {
        url: '/info/:id',
        templateUrl : 'templates/pages/info.html',
        controller : 'singlePage'
    })
    .state('category', {
        url: '/category/:type/:id',
        templateUrl : 'templates/pages/category.html',
        controller : 'categoryPage'
    })
});

谢谢!

最佳答案

首先,将您的 $http 调用包装到服务中。接下来,尝试使用 resolve https://github.com/angular-ui/ui-router/wiki#resolve

编辑

好的,示例在这里(没有包装到服务):

$stateProvider
.state('home', {
    url: '/',
    templateUrl : 'templates/pages/home.html',
    controller : 'homePage',
    resolve: {
       routeData:  function($http){
        return $http({
        method: 'post',
        url: 'path',
        data: postData /* your POST data - i don't know what is it for your code*/,
        headers: { 'Content-Type': 'application/x-www-form-urlencoded'               }
        })
     }
    }
})
.state('info', {
    url: '/info/:id',
    templateUrl : 'templates/pages/info.html',
    controller : 'singlePage'
})
.state('category', {
    url: '/category/:type/:id',
    templateUrl : 'templates/pages/category.html',
    controller : 'categoryPage'
})

在 Controller 中:

asTwl.controller('homePage', function($scope, routeData){   
      $scope.someData = routeData;
})

关于javascript - AngularJs每条路由调用http的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41868205/

相关文章:

javascript - appendChild树节点不展开

javascript - Jquery jAlert 插件 : JAlert over jPrompt

javascript - js代码获取动态生成的div ID

javascript - $broadcast 不从服务中触发 (AngularJS)

javascript - 如何在 Angular JS 中使用 ng-model 将文本框值发送到 Controller

javascript - 如何从定义的位置开始逐渐调整滚动上的粘性标题的大小

Javascript 全局拆分/加入或替换空格

javascript - 想知道如何过滤嵌套表格吗?

angularjs - Chrome 更新(angularjs 和 bootstrap-ui)后,当光标在模态之外释放时,模态关闭

javascript - angularjs ng-show 无法正常工作