Angular JS - 如何向模板URL /动态模板添加参数?

时间:2012-11-01 07:33:39

标签: angularjs

如果我有这样的典型路线:

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

感谢您的帮助!

赖安

1 个答案:

答案 0 :(得分:2)

这不是你问题的直接答案。但我认为这是一个重要的概念,你应该考虑。

为了使用AngularJS充分发挥它的潜力,你必须完全理解它的范例。

Angular是关于瘦服务器和胖客户端的。服务器主要是RESTful服务,为您的前端应用程序提供数据。然后通过绑定将该数据呈现给视图。模板在客户端处理,而不是在服务器端处理。这种方法可以让您更好地在服务器和客户端之间分配职责。

所以,考虑到你的用例我会建议移动&#34;动态&#34;从服务器端到客户端的模板逻辑,尽量不要混用它们。理想情况下,您的模板应该是一个静态文件,可以由某些CDN提供。服务器端逻辑所依赖的所有数据都可以使用ngResource模块和RESTfull接口从服务器获取动态模板。通过使用适当的绑定和指令客户端,您几乎可以实现任何渲染逻辑。您甚至可以创建自己的指令来隔离代码的可重复部分并干掉。

我希望它有所帮助。