Angularjs:请求数据之前的条件?

时间:2015-08-20 10:18:52

标签: javascript angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

注意:这是一个动态应用。

我使用了角度路线,所以我决定在加载控制器之前调用数据,我有多个页面有一个路由[动态路由],我能够为每个路由返回不同的数据页面,取决于它的slug,但是无论slug是什么,都会返回一些数据,所以为此我返回了一些返回true或false的数据键。

我要求的是能够检查密钥是否为真,并在加载控制器之前请求它的数据? 完全正面



// Routes
app.config(function($routeProvider, $locationProvider){
  $routeProvider
    .when('/:name', {
       templateUrl: '/views/main.html',
       controller: 'mainCtrl',
       resolve: {
        // RESOLVE THE MAIN DATA
        page: function(srvLibrary,$route, $rootScope) {
          return srvLibrary.getPage($route.current.pathParams.name);
        },
        // RESOLVE THE PROJECTS DATA
        projects: function(srvLibrary,$route, $rootScope) {
         return srvLibrary.getProjects();
        }
      }
    });
});

// USING FACTORY TO RESOLVE DATA
app.factory('srvLibrary', ['$http','$rootScope', '$interval' ,'$route', function($http,$rootScope, $interval, $route) {
  return {
    getPage: function(slug) {
    // THIS IS THE MAIN PAGE PROMISE [DYNAMIC ROUTED]
      var promise = $http({
        method: 'GET',
        url: baseUrl + '/api/v1/page.json',
        params: {menu_slug: slug}
      })
      promise.then(
        function(data) {
          return data;
        },
        function(error) {
          return false;
        },
        function(progress) {
          // report progress
        });
      return promise;
    },
    // PROJECTS DATA
    getProjects: function() {
      var promise = $http({
        method: 'GET',
        url: baseUrl + '/api/v1/portfolio.json'
      });
      promise.success(function(data) {
        return data;
      });
      return promise;
    },
  }
});

// MAIN CONTROLLER
app.controller('mainCtrl', function($scope, page){
  $scope.data = page.data;
  $scope.projects = projects.data;
});




我能够使用控制器自己根据键返回数据,但是有一些延迟,控制器完全加载后的数据加载,某些函数[插件]没有工作可能和其他问题。

感谢阅读

1 个答案:

答案 0 :(得分:1)

您可以收听$route$routeChangeSuccess之类的resolve个事件,这些事件会在{{1}}依赖项可用后触发。

https://docs.angularjs.org/api/ngRoute/service/ $路线