为什么在我的指令中使用ng-repeat会对我的绑定产生影响?

时间:2016-01-05 23:40:59

标签: javascript angularjs typescript

如果我们接受代码:

    <div data-ng-repeat="video in vm.videos">
        <p>{{video.title}}</p>
        <video-item content="video"></video-item>
    </div>

它似乎正确地呈现我的指令(视频对象被正确绑定并可从我的指令访问)。

但是,如果我只想显示一个视频(相同的对象类型,只是一个对象而不是一个集合):

    <p>{{vm.currentVideo.title}}</p>
    <div data-video-item content="vm.currentVideo"></div>

那么为什么范围不再能够访问绑定?

这是我的指示:

import Models = ROD.Domain.Models;

export class VideoDirective implements ng.IDirective {
    public restrict: string = "A";
    public replace: boolean = true;
    public scope: any = {
        content: "="
    };

    constructor(
        private $compile: ng.ICompileService,
        private templateSelector: ROD.Features.Video.Templates.ITemplateSelector<Models.IVideo>) {
    }

    public link: any = ($scope: IVideoScope, element: JQuery) => {
        const video: Domain.Models.IVideo = $scope.content;
        const template: string = this.templateSelector.buildTemplate(video);

        element.html(template);
        this.$compile(element.contents())($scope);
    };

提前致谢!

1 个答案:

答案 0 :(得分:1)

这是因为在绑定数据之前调用了链接函数。在模板加载后立即调用链接函数,因此它太早了。我通过在HTML块周围使用ng-if检查值是否已设置来解决这个问题。