Угловая директива не обнаруживает изменения в свойствах родительского контроллера
У меня есть HTML-файл, который использует подход "контроллер как". Он имеет сложный тип свойства (массив объектов), который я хочу представить пользователю с помощью директивы Angular, чтобы я мог использовать его и на других страницах. Моя директива также использует подход "контроллер как".
--- Snippet from HTML ---
<body ng-controller="documentViewerController as controller">
Length {{ controller.documentReferenceStructure.length }}
<document-reference document-reference-structure="controller.documentReferenceStructure"></document-reference>
--- Snippet from my directive's template ---
<p>Hello {{ controller.documentReferenceStructure.length}}</p>
--- My directive ---
module myapp.directives {
export class documentReferenceController {
public documentReferenceStructure: IDocumentReferenceStructurePart[];
constructor() {
this.documentReferenceStructure = [];
}
public update() {
this.documentReferenceStructure = [];
}
public static registerDirective(app: ng.IModule) {
app.controller("documentReferenceController", documentReferenceController);
app.directive("documentReference", function () {
return {
restrict: "EA",
templateUrl: "/app/directives/documentReference/documentReference.html",
scope: {
documentReferenceStructure: "="
},
controller: "documentReferenceController",
controllerAs: "controller",
link: (scope, element, attributes, controller : documentReferenceController) => {
}
};
});
}
}
}
Когда свойство documentReferenceStructure главного контроллера обновляется, веб-страница показывает правильную длину массива в HTML после "Length", но директива не обновляется и по-прежнему говорит "Hello 0". Если добавить кнопку в директиву, чтобы я мог проверить значение ее свойства documentReferenceStructure, кажется, что она никогда не будет обновлена.
Обновление свойства documentReferenceStructure контроллера страницы не распространяется вниз в директиву, разве это не то, что должна делать область действия: { documentReferenceStructure: "=" }?
Что мне не хватает? Что-то в ссылке () возможно?
1 ответ
Проблема заключалась в том, что я пропустил следующую собственность в моей директиве регистрации
bindToController: правда,
пример
return {
restrict: "EA",
templateUrl: "/app/directives/documentReference/documentReference.html",
scope: {
documentReferenceStructure: "="
},
controller: "documentReferenceController",
controllerAs: "controller",
bindToController: true
}