Повторное использование шаблона html в проекте Angular

У меня есть этот файл шаблона 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. <h5>Update Range</h5> станет <h5>Update Forced Range</h5>

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

    станет:

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

  3. ng-disabled = "form.$invalid || promise" promise-btn = "promise" ng-click = "updateRange()">Update</button>

    , ng-disabled = "form.$invalid || promise" promise-btn = "promise" ng-click = "updateForcedRange()">Update</button>

Есть ли способ избежать двух отдельных файлов шаблонов для вышеперечисленного? Не могли бы вы привести несколько примеров, ссылок или указателей того, как этого можно достичь?

Кроме того, я вижу в ответах, что решением было бы добавить логический параметр внутри компонента, а затем дважды вызвать его. Я не уверен, как вызвать компонент. Я вставил свой компонент ниже:

 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 24.12.2020 14:30

@Наташа Курьян, не могли бы вы опубликовать пример или поделиться ссылкой на него?

user14587018 24.12.2020 14:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
576
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать входные данные. Напишите компонент, который принимает входные данные, и визуализируйте их в html. затем вызовите этот компонент в нужных местах с помощью его селектора

Для событий используйте вывод

Смотрите документ https://angular.io/guide/inputs-outputs

Спасибо. Не могли бы вы дать ссылку на пример?

user14587018 24.12.2020 14:25

В самой документации есть примеры. Если вы хотите увидеть больше, просто введите google angular input, вы увидите их множество.

Talha Akca 24.12.2020 14:27
Ответ принят как подходящий

Похоже, нужно изменить только заполнители, поэтому вы можете использовать переменную, чтобы решить, какой заполнитель отображать в шаблоне. Например:

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>

вы можете сделать то же самое и для других тегов.


Из комментариев один из способов «определить» значение для isForced — ввести свойство ввода для компонента, т.е.

@Input() isForced: boolean;

и вызовите компонент из другого места, например:

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

Спасибо! Но куда делась бы функциональность переключения? ngOnInit() { this.isForced = true; // решите, как вы хотите переключить это }

user14587018 24.12.2020 15:20

Отредактировал ответ, чтобы подробно проиллюстрировать предыдущий комментарий/

Nicholas K 24.12.2020 17:59

Спасибо @Nicholas K, я добавил свойство к компоненту (я обновил вопрос и добавил компонент), но не знаю, как его вызвать. Сделал бы я это из отдельного класса, единственной целью которого было бы дважды вызвать компонент? И не могли бы вы показать мне, как будет выглядеть вызов моего компонента?

user14587018 25.12.2020 06:10

Понятия не имею об angularjs. Но мой ответ уже включает в себя, как вызвать его из приложения angular 2+. Кроме того, пожалуйста, не редактируйте вопрос, чтобы добавить новые требования - это должен быть другой вопрос, ИМО. Спасибо!

Nicholas K 25.12.2020 06:47

Другие вопросы по теме