Mar*_*tin 4 angularjs angularjs-scope angularjs-routing
我在这里看到一些示例代码延迟AngularJS路由更改,直到加载模型以防止闪烁
我马上就知道这是正确的方法,我只需要在完成加载后才能使控制器加载,通常大多数示例都会告诉您将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;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我的控制器是这样的
'use strict';
angular.module('TestApp')
.controller('ItemsCtrl', function ($scope) {
});
Run Code Online (Sandbox Code Playgroud)
那么当我的控制器在模块内声明时,如何在控制器上应用新功能?
我真正需要的是类似的东西
TestCtrl.resolve = {
items: function( $q) {
..........
return deferred.promise;
}
}
Run Code Online (Sandbox Code Playgroud)
然后这将允许我在我的routeprovider ..
when('/items', {
templateUrl: 'views/items.html',
controller: 'TestCtrl',
resolve: 'TestCtrl.resolve'}). // Need to use ' around resolve?
Run Code Online (Sandbox Code Playgroud)
但我很困惑如何让这个工作?
我真的很喜欢任何反馈,我很茫然.
如果要使用.controller语法使用resolve,则无法定义类似'TestCtrl.resolve',那么您必须在路由提供程序中定义内联.routeprovider中内联解析的优点是您可以轻松地重用控制器,但使用相同的控制器并更改解析函数中的逻辑
| 归档时间: |
|
| 查看次数: |
7043 次 |
| 最近记录: |