У меня есть этот файл шаблона 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
Вместо этого эти два файла могут быть одним файлом с динамически заполняемыми заполнителями.
Это места, где потребуется замена:
<h5>Update Range</h5> станет <h5>Update Forced Range</h5>
<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>
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;
};
}],
});
@Наташа Курьян, не могли бы вы опубликовать пример или поделиться ссылкой на него?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать входные данные. Напишите компонент, который принимает входные данные, и визуализируйте их в html. затем вызовите этот компонент в нужных местах с помощью его селектора
Для событий используйте вывод
Смотрите документ https://angular.io/guide/inputs-outputs
Спасибо. Не могли бы вы дать ссылку на пример?
В самой документации есть примеры. Если вы хотите увидеть больше, просто введите google angular input, вы увидите их множество.
Похоже, нужно изменить только заполнители, поэтому вы можете использовать переменную, чтобы решить, какой заполнитель отображать в шаблоне. Например:
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; // решите, как вы хотите переключить это }
Отредактировал ответ, чтобы подробно проиллюстрировать предыдущий комментарий/
Спасибо @Nicholas K, я добавил свойство к компоненту (я обновил вопрос и добавил компонент), но не знаю, как его вызвать. Сделал бы я это из отдельного класса, единственной целью которого было бы дважды вызвать компонент? И не могли бы вы показать мне, как будет выглядеть вызов моего компонента?
Понятия не имею об angularjs. Но мой ответ уже включает в себя, как вызвать его из приложения angular 2+. Кроме того, пожалуйста, не редактируйте вопрос, чтобы добавить новые требования - это должен быть другой вопрос, ИМО. Спасибо!
Используйте переменную для переключения между div и используйте
*ngIfв шаблоне.