Angularjs:单个html中的多个部分?

Posted

技术标签:

【中文标题】Angularjs:单个html中的多个部分?【英文标题】:Angularjs: Multiples partials in single html? 【发布时间】:2012-07-04 13:09:02 【问题描述】:

是否可以在一个 html 中检索多个 html 部分?我有下一种情况:

Template: header main footer

/index: header:"Welcome" main:"welcome text" footer:""

/help: header:"Help title" main:"faq tips" footer"Back to home"

使用 ng-include 我必须从服务器检索 6 个 html。如果我要在一个 html 中检索多个部分,那么我将只从服务器检索 2 个 html,一个用于 /index,一个用于 /help。

这种情况是真实情况的一个小例子。 ng-template 类型的标签 script 对我不起作用,因为该脚本必须在 ng-include 之前包含.

谢谢!

2012 年 4 月 7 日更新:

我试图一次更新多个 div,并使用独特的 html 检索。我不喜欢这样:

function IndexCtrl($scope) 
    $scope.mainPage = 'partials/index/index.html';
    $scope.headerTemplate = 'partials/index/header.html';
    $scope.footerTemplate = 'partials/index/footer.html';

在模板中使用 ng-includes 之后包含这些部分。我认为这不是正确的方法。还有其他方法吗?

谢谢!

【问题讨论】:

你能提供更多关于你正在寻找什么或你想要达到什么目的的信息吗? 【参考方案1】:

模板可以嵌入到主 html 中。例如,使用以下index.html

<!DOCTYPE html>
<html ng-app=app>
<meta charset=utf-8>
<title>App</title>
<ng-view>Loading...</ng-view>
<script type=text/ng-template id=partial1.html>
 <p>foo = foo</p>
</script>
<script type=text/ng-template id=partial2.html>
 <p>Contents of partial2.html</p>
</script>
<script src=app.js></script>

您可以使用以下app.js

angular.module('app', [], ['$routeProvider', '$controllerProvider', function($routeProvider, $controllerProvider) 

  $routeProvider.when('/p1',  templateUrl: 'partial1.html', controller: 'Partial1' );

  $controllerProvider.register('Partial1', ['$scope', function($scope) 
    $scope.foo = 'bar';
  ]);
]);

documentation for the $templateCache service 有更多详细信息。

【讨论】:

使用此解决方案要记住的一点是,它可能无法很好地扩展。如果您只有几个模板,这将非常有效。如果您正在构建一个包含数十个模板的大型应用程序,那么您的索引文件将会非常繁重且难以维护。 嗯,如果您使用后端来生成 HTML,您可以将您的部分作为真正的部分(不同的文件)进行管理,但为了提高性能,将所有部分合并到一个 HTML 中。我现在就是这样做的。 @Marçal,我在构建步骤中执行此操作,除了缩小所有 css 和 js 并分布在逻辑块(通用 + 当前应用程序)中,我生成一个包含所有模板的文件,这些模板可以轻松拥有由服务器或缓存层管理的 304 响应...在开发环境中,我只是根据需要单独提供文件。 有没有办法将 html 放在一个单独的文件中?即template1.html、teplate2.html等 @ManishRawat 如果模板不在缓存中,则在 templateUrl 下载。【参考方案2】:

我所做的是使用模板而不是 templateUrl,并使用 requirejs 文本插件来加载模板。以这种方式进行开发,您的模板可以拥有数千个文件,但一旦缩小,您就只有一个内联所有模板的 javascript 文件。

我创建了一个开源项目,它是为骨干网设置的,但可以很容易地修改为 angular,它为您进行缩小和 requirejs 文本插件接线:http://github.com/davidjnelson/agilejs

【讨论】:

另一种选择,也就是谷歌所做的,是使用闭包而不是 requirejs 进行依赖管理。

以上是关于Angularjs:单个html中的多个部分?的主要内容,如果未能解决你的问题,请参考以下文章

html AngularJS基本结构(模块中的单个控制器)

如何在单个服务器上提供多个前端(AngularJS)应用程序和 1 个后端(Laravel)应用程序?

AngularJS 中启动多个 ng-app 的问题

单个 angularjs 承诺上的多个 .then() ——全部使用 _original_ 数据

在 Angularjs 中 ui-sref 和 $state.go 如何传递单个多个参数和将对象作为参数

AngularJS $q 和 $q.all 单个数据源和多个数据源合并(promise的说明)