AngularJS:不在RouteProvider中而是在Controller中解析?
发布时间:2020-12-17 17:57:40 所属栏目:安全 来源:网络整理
导读:我在这里看到了一些示例代码 Delaying AngularJS route change until model loaded to prevent flicker 我马上就知道这是正确的方法,我只需要在完成加载后才能使控制器加载,通常大多数示例都会告诉您将routeprovder中的代码解析为内联函数,但这听起来不对.控
我在这里看到了一些示例代码
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; } } 然后这将允许我在我的routeprovider .. when('/items',{ templateUrl: 'views/items.html',controller: 'TestCtrl',resolve: 'TestCtrl.resolve'}). // Need to use ' around resolve? 但我很困惑如何让这个工作? 我真的很喜欢任何反馈,我很茫然. 解决方法
如果要使用.controller语法使用resolve,则无法定义类似’TestCtrl.resolve’,那么您必须在路由提供程序中定义内联. routeprovider中内联解析的优点是您可以轻松地重用控制器,但使用相同的控制器并更改解析函数中的逻辑
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |