AngularJS在开始时加载部分,而不是在django需要时加载?

时间:2015-06-24 07:56:58

标签: javascript ruby-on-rails ruby angularjs django

我在django中有模板文件夹,其中我的应用程序的所有模板/部分都驻留在其中。我希望将所有部分加载到开头角度的模板缓存中,而不是根据控制器请求。

我有这样的路线设置:

var myApp = angular.module('myApp', []).
config(['$routeProvider', function ($routeProvider) {
$routeProvider.
    when('/landing', {
        templateUrl: '/landing-partial',
        controller: landingController
    }).
    when('/:wkspId/query', {
        templateUrl: '/query-partial',
        controller: queryController
    }).
    otherwise({
        redirectTo: '/landing'
    });
}]);

我想在django中解决类似于rails gem(https://github.com/pitr/angular-rails-templates)的问题。

2 个答案:

答案 0 :(得分:1)

根据您的构建系统,有些插件可以为您解决此问题。

对于GruntJS: https://www.npmjs.com/package/grunt-angular-templates

和Gulp: https://www.npmjs.com/package/gulp-angular-templatecache

只需将它们指向您的html文件,它们就会创建一个类似于:

的javascript文件
  angular.module('app').run(["$templateCache", function($templateCache) {
  $templateCache.put("home.html",
    // contents for home.html ... 
  );

并将从那里解析模板,而不是发出http请求来获取实际文件。 您只需要将此js文件与您的应用脚本标记一起包含在内,就可以了。

答案 1 :(得分:0)

您可以像在这里一样在index.html中插入模板:

<script type="text/ng-template" id="/landing-partial">
  Content of the template.
</script>
<script type="text/ng-template" id="/query-partial">
  Content of the template.
</script>

之后,您可以在路由器中使用这些模板:

var myApp = angular.module('myApp', []).
config(['$routeProvider', function ($routeProvider) {
$routeProvider.
    when('/landing', {
        templateUrl: '/landing-partial',
        controller: landingController
    }).
    when('/:wkspId/query', {
        templateUrl: '/query-partial',
        controller: queryController
    }).
    otherwise({
        redirectTo: '/landing'
    });
}]);

它的工作方式类似于您提供的模块。角度自举模板将被放到$ templateCache并可以在任何地方使用。