我需要构建一个用户,该用户可以是不同RESTAPI调用的结果(每种方式都来自特定的路由)。
假设我们可以访问以下示例:
> 超文本传输协议
超文本传输协议://myapp/#user/:user_id
angular.module('Test').config(['$routeProvider', function($routeProvider) { $routeProvider. when('/user/:pseudo', { templateUrl: 'views/user.html', controller: 'userFromPseudoCtrl' }). when('/user/:user_id', { templateUrl: 'views/user.html', controller: 'userFromIdCtrl' }). otherwise({ redirectTo: '/' }); } ]);
然后,我有3个不同的控制器:
>
userfromposeudoctrl
userFromIdCtrl
userCtrl
(控制视图)
angular.module('Test').controller('userFromPseudoCtrl', function($User, $http) { $http.get('/getUserFromPseudo/test') .success(function(User) { $User.set(User); }); }); angular.module('Test').controller('userFromIdCtrl', function($User, $http) { $http.get('/getUserFromId/test') .success(function(User) { $User.set(User); }); }); angular.module('Test').controller('userCtrl', function($scope, $User) { $scope.User = $User; });
这种方式是不好的,因为userCtrl
是在$超文本传输协议回调(从路由器的控制器)之前调用的,所以User实际上是空的(我跳它会自动更新)。
在我尝试使用它(使用$rootScope.$apply()
)进行管理之前,我想知道做这种处理(从路由器控制器加载数据然后显示数据)的更优化的方法是什么。
你用的控制器和我一样多吗?您是否在“绑定”视图的同一个控制器中处理这些REST API调用?我是有趣的知道!
定义路由时,您可以定义一个名为resolve
的附加值,该值是一个对象,其中每个字段都promise在解析后将注入控制器:
路线定义:
when('/user/:pseudo', {
templateUrl: 'views/user.html',
controller: 'userFromPseudoCtrl'
resolve: {dataNeeded: userPseudoService.getUserData()});
服务(新):
angular.module('Test').service('userPseudoService', function($http){
return $http.get('/getUserFromPseudo/test');
});
控制器:
angular.module('Test').controller('userFromPseudoCtrl', function(dataNeeded){});
在promise解决之前,路线不会改变。
问题内容: 是否可以基于路由组动态加载控制器,js文件和模板?伪代码不起作用: 我已经看到了很多这样的问题,但是没有一个问题基于路由组加载js文件/控制器。 问题答案: 我设法解决了受@ calebboyd,http : //ify.io/lazy-loading-in-angularjs/ 和http://weblogs.asp.net/dwahlin/archive/2013/05/22/dy
问题内容: 您好朋友,我想在特定的div加载数据之前向Ajax加载器显示,但问题是数据在同一页面上动态传输,但是我的脚本从另一个文件调用数据, 请参见下面的代码 脚本 的HTML 它的工作正常,但我想在同一页面中加载数据,请帮助我 提前致谢 .... 编辑 我想说明之前加载数据装载到 问题答案: 您可以尝试使用以下html- 和脚本-
问题内容: 我试图在UI-Router router.js文件中延迟加载控制器和模板,但是在模板处理上遇到困难。 控制器已正确加载,但是在加载之后,我们必须加载模板,这就是问题所在。 ocLazyLoad加载控制器后,我们解析了一个Angular Promise,它也包含在templateProvider中。问题在于,在文件加载完成后,不是返回诺言(templateDeferred.promise
我是新手所以我可能错过了什么
问题内容: 我对何时实例化控制器感到困惑。另外,嵌套状态时如何实例化控制器。我可能会感到困惑,如何将范围附加到视图和控制器,也就是说,如果每个视图都有自己的控制器和范围,或者它们共享相同的范围。 有人可以解释何时实例化控制器吗?在嵌套路由下,所有视图是否共享一个控制器和范围?当我切换状态并返回另一个控制器实例化的状态时会发生什么? 以下是我的路线(配置文件): 问题答案: 要获得更详细的答案,我们
我使用React路由器的SPA,但我不确定如何显示索引路由"/"上的一些内容。 我的顶级路由器配置只是: 顶层组件呈现页眉/页脚和其他公共元素: 子路由工作正常,它们在应用程序组件中呈现。但是,如何在根路径上呈现某些内容,使其不只是一个空白页面?