截取用于Meteor + Blade的Angular模板加载

时间:2013-02-04 14:26:14

标签: angularjs meteor node-blade

小小的简短:我正在使用AngularJs和Meteor + Blade,而不使用Meteor_angularjs包用于meteor。 Blade在服务器中构造页面的主体,然后我在客户端手动引导角度。

Blade在Template['template_name']下提供了模板文件,因此可以在客户端轻松呈现这些文件。我想做点什么:

div(ng-include='content.blade')
// HTML => <div ng-include='content.blade'></div>

并以某种方式使其发挥作用 为了保持兼容性而不是创建新的指令,我认为可以截取XHR请求对静态模板的角度设置并添加条件

if(URI ends with '.blade') then
    name <- strip '.blade' in URI
    return Template[name]()

应返回该模板的已编译HTML。

更新
巧合的是,我遇到了$ templateCache,现在我认为这是要走的路 我创建了一个'ngMeteor'模块,我将用它来进行流星角积分。

angular.module 'ngMeteor',[], ->
  throw 'Meteor object undefined.' unless Meteor? # Is it fine to put here?

angular.module('ngMeteor.blade',['ngMeteor']).
  run ($templateCache) ->
    $templateCache.put "#{name}.blade", render() for own name, render of Template

在我的应用中:

angular.element(document).ready ->
  angular.bootstrap document, ['app']

app = angular.module 'app', ['ngMeteor.blade'], ->
app.controller 'mainCtrl', ($scope,$templateCache) ->
  $scope.content = $templateCache.get "content.blade" # Works!!

刀片(body.blade):

#main(ng-controller='mainCtrl') {{ content }}

现在它可以工作了,我可以在注入$ templateCache并根据其名称设置模板后从控制器获取渲染模板,但ng-include仍然无效。

1 个答案:

答案 0 :(得分:0)

我之前在问题中的更新实际上是正确的答案,因为div(ng-include="'content.blade'")而导致ngInclude对我不起作用...是的,内部引用!就像我第N次遇到那个问题一样 简历中的答案是:

angular.module('blade').
  run ($templateCache) ->
    $templateCache.put "#{name}.blade", render() for own name, render of Template

模板是流星全局变量,其中blade将存储准备渲染的模板,然后使用$ templateCache我将渲染的模板与相应的名称/ ID放在一起,这样Angular可以使用它们。
编辑:基于这个问题,我为流星中的无支撑角度开发创建了一个流星包ng-meteor