使用 webpack 在另一个模板中包含一个 angular 模板

Include an angular template in another using webpack

我在使用 angular 和 webpack 时遇到问题。我的项目由带有控制器的多个视图组成。

例如,我有一个加载所有用户列表的视图 userSummary.tmpl.html。我想在另一个显示所有用户的 groupSummary.tmpl.html 中重复使用此模板。

我不能使用 ng-include,因为我所有的视图都包含在 bundle.js 中,没有别的。我想使用 WebPack 将我的视图直接包含在另一个中。

这可能吗?

您可以在使用 ngtemplate-loader or ng-cache-loader 时使用 ng-include。如您所述,这会将其全部捆绑到文件中。

尽管您也可以使用 file-loader 将内容分离到单独的文件中,这将在捆绑目录中克隆文件并为您提供每个 HTML 文件的路径,并且在 angular.

要启用,您必须配置 "relativeTo" 参数,否则您的模板部分会加载到“/home/username/path/to/project/path/to/template/”(检查您的 bundle.js,您可能在你的项目)

var ngTemplateLoader = (
    'ngtemplate?relativeTo=' + path.resolve(__dirname, './src/') +
    '!html'
);

module.exports = {
    ...
    module: {
        loaders: [
            {test: /\.html$/, loader: ngTemplateLoader},
        ],
    },
    ...
}

然后在你的代码中,做一个side-effect只需要:

// src/webapp/admin/js/foo.js
require('../../templates/path/to/template.html');

然后你可以载入html:

<div ng-include src="'/webapp/templates/path/to/template.html'"</div>

在 Webpack.config 文件中,您可以添加如下所示的主要 html

   plugins: [ 
    new HtmlWebpackPlugin({
    template: 'index.html'
    }),
    new ExtractTextPlugin('bundle.css')
    ], 

在 package.json 中包含 html-loader 并在配置块中单独使用以下方法就足够了。

$stateProvider.state('app', {
    url: '/app',
    template: require('html-loader!root/app/Common/templates/role.html'),
    controller: 'roleController'
})

所以所有的部分都将被捆绑在 bundle.js itself.No 需要在 webpack-config 中添加加载器

更新配置 Webpack 3

  {
    test: /\.html$/,
    exclude: /node_modules/,
    use: [
      { loader: 'ngtemplate-loader?relativeTo=' + __dirname + '/app' },
      { loader: 'html-loader' }
    ]
  },

然后可以通过在组件 js 文件中使用 require 来导入 html。

require('../../templates/path/to/template.html');

并在您的组件 html 文件中

<ng-include src="'/webapp/templates/path/to/template.html'"></ng-include>