0

我有一个使用“控制器作为”方法的 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 属性更新时,网页在“Length”之后的 HTML 中显示正确的数组长度,但指令没有更新,仍然显示“Hello 0”。如果在指令中添加一个按钮,以便我可以检查其 documentReferenceStructure 属性的值,它似乎永远不会更新。

更新页面控制器的 documentReferenceStructure 属性不会向下传播到指令中,这不是 scope: { documentReferenceStructure : "=" } 应该做的吗?

我错过了什么?链接()中的东西也许?

4

1 回答 1

0

问题是我在指令注册中缺少以下属性

绑定控制器:真,

例子

            return {
                restrict: "EA",
                templateUrl: "/app/directives/documentReference/documentReference.html",
                scope: {
                    documentReferenceStructure: "="
                },
                controller: "documentReferenceController",
                controllerAs: "controller",
                bindToController: true
            }
于 2015-11-27T14:50:58.500 回答