【问题标题】:Reuse html template in Angular project在 Angular 项目中重用 html 模板
【发布时间】:2020-12-24 13:09:46
【问题描述】:

我有这个 html 模板文件,range-details-dialog.tpl.html

<div class="modal-header clearfix text-left">
    <h5>Update Range</h5>
</div>
<div class="modal-body">
    <form name="form" role="form" class="ng-pristine ng-valid" novalidate ng-submit="updateRange()">
        <div class="form-group-attached">
            <div class="row">
                <div class="col-sm-12">
                    <div class="form-group form-group-default input-group p-l-10 p-r-10" ng-class="{ 'has-error' : form.$invalid }">
                        <p ng-show="form.rangeDaily.$error.min" class="help-block">Daily range more than £5</p>
                    </div>
                </div>
            </div>
        </div>
    </form>
    <div class="row">
        <div class="col-sm-8"></div>
        <div class="col-sm-4 m-t-10 sm-m-t-10">
            <button type="button" class="btn btn-primary btn-block m-t-5" 
             ng-disabled="form.$invalid || promise" promise-btn="promise" ng-click="updateRange()">Update</button>
        </div>
    </div>
</div>

然后我想要另一个文件forced-range-details-dialog.tpl.html 这两个文件可以是一个文件,而不是动态填充的占位符。 这些是需要替换的地方:

  1. &lt;h5&gt;Update Range&lt;/h5&gt; 将变为 &lt;h5&gt;Update Forced Range&lt;/h5&gt;

  2. &lt;p ng-show="form.rangeDaily.$error.min" class="help-block"&gt;Daily range more than £5&lt;/p&gt;

    会变成:

    &lt;p ng-show="form.forcedRangeDaily.$error.min" class="help-block"&gt;Forced Daily range more than £5&lt;/p&gt;

  3. ng-disabled="form.$invalid || promise" promise-btn="promise" ng-click="updateRange()"&gt;Update&lt;/button&gt;

    ng-disabled="form.$invalid || promise" promise-btn="promise" ng-click="updateForcedRange()"&gt;Update&lt;/button&gt;

有没有办法避免上述两个单独的模板文件?您能否提供一些示例、链接或指针来说明如何实现?

另外,我在答案中看到一个解决方案是在组件内添加一个布尔参数,然后调用它两次。我不确定如何调用该组件。我在下面粘贴了我的组件:

 angular.module('app.investment.rangeDetails')
  .component('pxForcedLimitAmount', {
      templateUrl: '/assets/js/apps/range/range-details-dialog.tpl.html',
      bindings: {
          amount: '<',
          isRequest: '<?',
          requestedAt: '<?',
          @Input() isForced: boolean  //<<----I added this based on answers below
      },
      controller: [function () {
          var ctrl = this;

          ctrl.$onInit = function () {
              ctrl.isRequest = ctrl.isRequest === true || false;
          };
      }],
  });

【问题讨论】:

  • 使用变量在 div 之间切换并在模板上使用 *ngIf
  • @Natasha Kurian,你能发一个例子或分享一个链接吗?

标签: javascript html angularjs templates angular-template


【解决方案1】:

似乎只有占位符需要更改,因此您可以使用变量来决定要在模板上显示的占位符。例如:

isForced: boolean;

ngOnInit() {
   this.isForced = true; // decide how you want to toggle this
}

在模板上:

<h5 *ngIf="!isForced">Update Range</h5>
<h5 *ngIf="isForced">Update Forced Range</h5>

<p *ngIf="!isForced" ng-show="form.rangeDaily.$error.min" class="help-block">
     Daily range more than £5</p>


<p *ngIf="isForced" ng-show="form.forcedRangeDaily.$error.min" class="help-block">
     Forced Daily range more than £5</p>

你也可以对其他标签做同样的事情。


在 cmets 中,“确定”isForced 值的一种方法是将输入属性引入组件,即

@Input() isForced: boolean;

并从其他地方调用组件,例如:

<app-user [isForced]="true"></app-user>

【讨论】:

  • 谢谢!切换功能会去哪里? ngOnInit() { this.isForced = true; // 决定你想如何切换这个 }
  • 编辑了答案以详细说明之前的评论/
  • 谢谢@Nicholas K,我向组件添加了属性(我更新了问题并添加了组件)但我不知道如何调用它。我会从一个单独的类中执行它,它的唯一目的是调用该组件两次吗?你能告诉我调用我的组件的样子吗?
  • 不知道 angularjs。但我的回答已经包括如何从 Angular 2+ 应用程序调用它。此外,请不要编辑问题以添加新要求 - 这应该是 IMO 的另一个问题。谢谢!
【解决方案2】:

您可以使用输入。编写一个接受输入的组件,并将其呈现为 html。然后用它的选择器在想要的地方调用这个组件

事件使用输出

请参阅文档https://angular.io/guide/inputs-outputs

【讨论】:

  • 谢谢。你能提供一个例子的链接吗?
  • 文档本身就有例子。如果您想查看更多内容,只需输入谷歌角度输入,您就会看到大量的内容
猜你喜欢
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2018-10-12
  • 2018-11-04
  • 2018-02-03
  • 2018-12-15
  • 1970-01-01
相关资源
最近更新 更多