如果我们接受代码:
<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);
};
提前致谢!
答案 0 :(得分:1)
这是因为在绑定数据之前调用了链接函数。在模板加载后立即调用链接函数,因此它太早了。我通过在HTML块周围使用ng-if检查值是否已设置来解决这个问题。