gpt4 book ai didi

angularjs - 我可以从指令内部观察 Controller 范围属性吗?

转载 作者:行者123 更新时间:2023-12-02 06:19:11 25 4
gpt4 key购买 nike

假设这个 watch 在一个指令中,是否可以像这样从主 Controller 观察一个变量?这是整个指令。当它看起来像这样时, watch 确实会在第一页加载时被触发,但之后再也不会。我没有将 questionNumber 传递给指令。这就是它不知道的原因吗?

    .directive('videoLoader', function () {
return function (scope, element, attrs) {
scope.$watch(attrs.videoLoader, function () {
element[0].load();
element[0].play();
$(scope.video).bind('ended', function () {
$(this).unbind('ended');
if (!this.ended) {
return;
}
scope.tutorialNumber++;
scope.$apply();
scope.loadFromMenu();
});
});
scope.$watch(scope.questionNumber, function(){
if (scope.sectionNumber === 0 && scope.tutorialNumber === 0) { //if first video play congratulations etc
if (scope.questionNumber === 1) {
start(164.15);
pause(166.8);
} else if (scope.questionNumber === 2) {
start(167.1);
pause(170);
} else if (scope.questionNumber === 3) {
start(171.1);
}
}
});
}

})

最佳答案

由于您的指令未创建新范围或隔离范围,因此它使用影响指令在 HTML 中使用位置的范围。如果 controls 是一个指令并且它创建了一个新的或隔离的范围,那么 video-loader 指令也将使用该范围。这或许可以解释为什么 @rajkamal 的回答对您不起作用。

如果 controls 不是指令,则视频加载器将使用 Controller 的作用域(除非您在 ng-repeat 或其他创建子作用域的指令中有视频加载器。)没有向我们展示更多您的 HTML,无法确定您的指令将获得的范围。

这里是 a plunker显示在 Controller 范围内使用的视频加载器指令如何访问该范围(特别是 questionNumber 属性)。

虽然习惯 jsfiddle 和 plunker 可能需要一些时间,但我强烈建议花时间。如果您有 jsfiddle 或 plunker,人们可以更快地帮助您。

关于angularjs - 我可以从指令内部观察 Controller 范围属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15172472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com