从内部事件回调更改绑定角度变量

时间:2014-06-20 17:11:58

标签: javascript angularjs

我试图在视频加载时更改输入字段的值。这是相关代码:

这有效:

$scope.stopRecording = function () {
    // value of the input changes as expected
    $scope.videoEndPos = 10;
};

这不是

$scope.stopRecording = function () {

    video.onloadedmetadata = function() {

        $scope.videoEndPos = 10;

        // the value of the input does not change, but this still correctly outputs 10
        console.log($scope.videoEndPos);
    };

};

为了保持这个简短,我在那里省略了一些重要的视频内容,但是那部分正在工作,onloadedmetadata正在正常启动,所以它的角色和输入都很时髦。但是,如果您怀疑我遗漏了一些相关代码,请与我们联系。

2 个答案:

答案 0 :(得分:2)

video.stopRecording发生在Angular宇宙之外,所以它不知道变化。您需要使用的是$scope.$apply,它允许您从Angular外部执行对范围的更改。

$scope.stopRecording = function () {

    video.onloadedmetadata = function() {
        $scope.$apply(function(){
            $scope.videoEndPos = 10;
        });

        // the value of the input does not change, but this still correctly outputs 10
        console.log($scope.videoEndPos);
    };

};

答案 1 :(得分:1)

video.onloadedmetadata可能是异步调用,直到摘要循环之后才会返回。将其更改为:

$scope.stopRecording = function () {

    video.onloadedmetadata = function() {
        $scope.$apply(function() {
          $scope.videoEndPos = 10;
        });
    };
};