ng-контроллер с ng-include не связывается правильно - PullRequest
1 голос
/ 23 марта 2020

У меня есть этот компонент с файлами 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 для повторного использования.

Почему я не использую директиву? По двум причинам:

  1. Здесь нет логики c, это всего лишь html.
  2. Я пытался, но мне нужно заменить свойство в 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 (...))

...