Fire $只在外部更换时才会观看

时间:2016-09-02 09:56:05

标签: javascript angularjs directive watch

我正在编写一个Video指令来封装HTML5视频标记并提供它周围的基本绑定。

一切都很好,但我对currentposition属性有疑问。

<my-video currentposition="$ctrl.currentVideoPosition"></my-video>

我允许用户绑定到它以提供一种机制,让他们通过某些控件跳过视频,但也要读取值以找出当前视频的位置。

在指令链接功能中,我会看到此属性进行更改并相应地更新我的视频位置。

$scope.$watch(() => { return $scope.currentposition; }, () => {
    var videoElement = $element.find("video");

    (videoElement[0] as any).currentTime = $scope.currentposition;
});

只要它仅用于搜索视频而不用于读取当前位置,这样就可以正常工作。一旦我在指令中设置当前位置,它就会触发手表,使其永久地粘在当前位置。

最好的方法是什么?我想到的一些选项,但我不喜欢他们中的任何一个

  • 有两个属性,一个用于位置搜索,一个用于位置读取
  • 设置一个标志,表示我在内部更新了该属性,并忽略了下一个$ watch回调

1 个答案:

答案 0 :(得分:1)

您可以使用The email is not valid和单向绑定。

component
只要在组件外部发生更改,就会调用

module.component('myVideo', { bindings: { currentposition: '<' }, controller: class MyVideoController { $onChanges(changes) { if (changes.currentposition) { var videoElement = $element.find("video"); (videoElement[0] as any).currentTime = this.currentposition; } } } ,这正是您想要的。