如果我有这样的典型路线:
angular.module('app', ['ngResource']).
config(function($routeProvider, $locationProvider) {
.when('/item/:itemId', {
template: '<div ng-bind-html-unsafe="html"></div>',
controller: blobs.controller.RouteController,
})
});
如何从服务器请求“动态视图”?即。服务器的路由应该导致动态的php页面,填写并保留一些数据,并根据路径中给定的itemId返回它想要的任何html。 我尝试为模板容器设置一些复杂的路由监控和ajax请求,然后在RouteController的加载时注入响应html,即:
Service.request('item/'+$routeParams.itemId, {}, function(r) {
$scope.html = r;
$compile($scope.html)($scope); //generates infinite loop for some reason?
$scope.$apply();
});
但这不太合适。 PHP的响应html get被加载到容器模板中就好了,但数据绑定似乎不起作用(即它在任何地方都包含{{*}}。)
有更好的方法吗? 我真的只想尝试这样的路线:
/项目/我的 - 项目 进入一个相同的“templateUrl”,即: / item / My-Item或/ views / item / My-Item ..etc
感谢您的帮助!
赖安
答案 0 :(得分:2)
这不是你问题的直接答案。但我认为这是一个重要的概念,你应该考虑。
为了使用AngularJS充分发挥它的潜力,你必须完全理解它的范例。
Angular是关于瘦服务器和胖客户端的。服务器主要是RESTful服务,为您的前端应用程序提供数据。然后通过绑定将该数据呈现给视图。模板在客户端处理,而不是在服务器端处理。这种方法可以让您更好地在服务器和客户端之间分配职责。
所以,考虑到你的用例我会建议移动&#34;动态&#34;从服务器端到客户端的模板逻辑,尽量不要混用它们。理想情况下,您的模板应该是一个静态文件,可以由某些CDN提供。服务器端逻辑所依赖的所有数据都可以使用ngResource
模块和RESTfull接口从服务器获取动态模板。通过使用适当的绑定和指令客户端,您几乎可以实现任何渲染逻辑。您甚至可以创建自己的指令来隔离代码的可重复部分并干掉。
我希望它有所帮助。