使用resolve和$ resource在Angular.js中加载控制器的数据

时间:2014-05-14 07:43:45

标签: angularjs

我正在尝试通过API从API加载作业并将其传递给控制器​​。

.when('/jobs/edit/:id', {
    templateUrl: 'partials/jobs/edit',
    controller: 'JobCtrl',
    resolve: function($routeParams, Job){
        var jobId = $routeParams.id;

        return {
            job: function(){
                return Job.get({ id: jobId});
            }
        };
    }
})

控制器:

angular.module('App')
  .controller('JobCtrl', function ($scope, Job, $location, $routeParams) {
        $scope.newJob = data.job; //does not work
        $scope.errors = {};

        $scope.save = function (form) {
                   //...
        };
    });

型号:

angular.module('App')
    .factory('Job', function ($resource) {
        return $resource('/api/jobs/:id', {
            id: '@id'
        }, { //parameters default
            update: {
                method: 'PUT'
            }
        });
    });

如何获取控制器中的数据?路线中的resolve区块甚至没有被执行。

编辑:此页面包含许多不同类型解析的示例: http://phillippuleo.com/articles/angularjs-timing-multiple-resource-resolves-ngroute-and-ui-router

1 个答案:

答案 0 :(得分:0)

您似乎解决了实施不正确的问题 您可以尝试更改路由器,如:

.when('/jobs/edit/:id', {
  templateUrl: 'partials/jobs/edit',
  controller: 'JobCtrl',
  resolve: {
    job: function (Job, $routeParams) {
      return Job.get({id: $routeParams.id});
    }
  }
})

通过将Job包含在依赖项中来获取控制器中的已解析数据:

angular.module('App')
  .controller('JobCtrl', function ($scope, job, $location, $routeParams) {
    // job is resolved here
    $scope.job = job;
    $scope.newJob = {};
    $scope.errors = {};

    $scope.save = function (form) {
               //...
    };
  });

<强>已更新
如果您想使用JobCtrl进行创建和编辑,则可以在重新设定的null中为新作业页面返回job。这意味着:在你创建一个工作之前,还没有任何工作。

.when('/jobs/new', {
  templateUrl: 'partials/jobs/new',
  controller: 'JobCtrl',
  resolve: {
    job: function () {
      return null;
    }
  }
})