【问题标题】:AngularJS: Resolving not in RouteProvider but in Controller?AngularJS:不是在 RouteProvider 而是在控制器中解决?
【发布时间】:2013-07-17 06:38:14
【问题描述】:

我在这里看到了一些示例代码Delaying AngularJS route change until model loaded to prevent flicker

虽然这是正确的方法,但我需要让我的控制器仅在解析完成加载时才加载,通常周围的大多数示例都会告诉您将代码置于 routeprovder 中的解析下内联函数,但这听起来是错误的。控制器需要它,所以为什么不让控制器实现要解析的功能。这听起来正是我想要的,即。这好像是用原型模式??

function PhoneListCtrl($scope, phones) {
  $scope.phones = phones;
  $scope.orderProp = 'age';
}

PhoneListCtrl.resolve = {
  phones: function(Phone, $q) {
    // see: https://groups.google.com/forum/?fromgroups=#!topic/angular/DGf7yyD4Oc4
    var deferred = $q.defer();
    Phone.query(function(successData) {
            deferred.resolve(successData); 
    }, function(errorData) {
            deferred.reject(); // you could optionally pass error data here
    });
    return deferred.promise;
  }
}

问题是我的控制器是这样的

'use strict';

angular.module('TestApp')
  .controller('ItemsCtrl', function ($scope) {
});

那么,当我的控制器在模块中声明时,如何在控制器上应用新功能?

我真正需要的是像

 TestCtrl.resolve = {
      items: function( $q) {
          ..........
        return deferred.promise;
      }
    }

这将允许我在我的路由提供者中拥有..

  when('/items', {
    templateUrl: 'views/items.html', 
    controller: 'TestCtrl', 
    resolve: 'TestCtrl.resolve'}). // Need to use ' around resolve?

但我很困惑如何让它发挥作用?

我真的很想得到任何反馈,但我很茫然。

【问题讨论】:

    标签: angularjs angularjs-scope angularjs-routing


    【解决方案1】:

    如果你想通过 .controller 语法使用解析,则不能像“TestCtrl.resolve”那样定义,那么你必须在路由提供者中定义内联。在 routeprovider 中内联解析的优点是您可以轻松地重用控制器,但使用相同的控制器并更改解析函数中的逻辑

    【讨论】:

    • 好的,谢谢,所以实际上正确的方法是将其插入 Routeprovider。
    • 是的,它非常适合插入到 routeprovider 中,它将允许重用您的控制器
    【解决方案2】:

    您也可以使用服务:

    resolve: {data : function(service) {
      return service.getData();
    }}
    

    【讨论】:

    • 这是我的首选方法。
    • 但是如果你需要来自 $routeParams 的东西怎么办?例如,我想解析应用程序(/api/1/apps/:appId),为此我需要知道 $routeParams.appId
    • @zeronone 依赖于 $route,并在你的解析方法中访问 $route.current.params
    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多