У меня есть этот компонент с файлами a.html
и a.ts
.
Внутри a.html
контроллер, определенный в a.ts
(AController), называется ar
.
Также внутри a.html
звоните b.html
с ng-include
.
<div ng-include="'/public/templates/b.html'"
ng-controller="AController as ctr"
ng-if="someBoolean">
Внутри b.html
есть много связанных элементов, и они ссылаются на контроллер как ctr
.
<div class="cardContent horizontalLayout" style="min-height:54px">
<span>Last Name</span>
<div class="flex"></div>
<div class="horizontalLayout" ng-style="{'width': inputWidth}">
<input type="text"
class="materialInput flex smallPlaceholder"
ng-model="ctr.tempItem.lastName"
placeholder="Write here...">
</div>
</div>
<div class="cardContent horizontalLayout" style="min-height:54px">
<span>First Name</span>
<div class="flex"></div>
<div class="horizontalLayout" ng-style="{'width': inputWidth}">
<input type="text"
class="materialInput flex smallPlaceholder"
ng-model="ctr.tempItem.firstName"
placeholder="Write here...">
</div>
</div>
(...)
Проблема: по какой-то причине привязка не работает. b.html
не распознает ctr
как AController, но ng-include
работает нормально, потому что шаблон отображается.
Дополнительные данные: если я изменяю вызов на b.html
со следующим, он работает нормально :
<div ng-include="'/public/templates/b.html'"
ng-controller="AController as ar"
ng-if="someBoolean">
Итак, это работает, только если я назову контроллер sarasa в b. html таким же, как в a. html. Я не хочу этого, потому что b. html должен быть polimorfi c для повторного использования.
Почему я не использую директиву? По двум причинам:
- Здесь нет логики c, это всего лишь html.
- Я пытался, но мне нужно заменить свойство в true, потому что стили в. html должно применяться и в div, и с заменой в true я не могу написать более одного элемента, потому что AngularJS это не нравится. Я изучаю опцию transclude, но все же не очень хорошая идея использовать что-то такое большое для этого.
Редактировать:
Это что-то похожее на мой контроллер:
namespace C {
class CController {
public someProperty: string;
constructor(private $scope: ng.IScope) {}
public someMethod(){}
}
App.controller('AController', ['$scope', CController]);
};
CController - это контроллер c.html
, который включает в себя a.html
с ng-include
. Итак, CController является контроллером a.html
, как написано в последней строке (App.controller (...))