gpt4 book ai didi

javascript - Angular.js 计时器完成回调方法没有数据绑定(bind)?

转载 作者:行者123 更新时间:2023-12-03 08:23:42 24 4
gpt4 key购买 nike

我正在编写一个 Angular.js 应用程序,它是一种显示图片并要求用户按下按钮以获得正确答案的测验。然后应用程序存储对象的答案。

除了时间回调函数不绑定(bind)值之外,所有这些都工作正常。

当单击 yes 时,它也会更新我的 img: {{questions[questionId]['imgUrl']}} ,该图像在以下函数中更新:

$scope.yes = function() {
//instantiate timer
//save data
$scope.questions[$scope.questionId]['userAnswer'] = 'a';
//move to next question
$scope.questionId++;
startTimer('progressbar-timer');

};

出于某种原因,回调函数timeout()应该执行相同的任务,但它不起作用。我在控制台日志中获得了正确的值,但 img: {{questions[questionId]['imgUrl']}} 未更新/

我应该在这里进行额外的绑定(bind)吗?

<!DOCTYPE html>
<html lang="en-US">
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script>
<!-- compiled CSS -->
<link rel="stylesheet" type="text/css" href="bower_components/bootstrap/docs/assets/css/bootstrap.css" />
<link rel="stylesheet" type="text/css" href="bower_components/bootstrap/docs/assets/css/bootstrap-responsive.css" />


<!-- compiled JavaScript -->
<script type="text/javascript" src="dist/assets/js/angular-timer-bower.js"></script>
<script type="text/javascript" src="dist/assets/js/angular-timer-all.min.js"></script>

<body>

<div ng-app="ajokoeApp" ng-controller="testCtrl">


<br>
question: {{questions[questionId]['question']}}
img: {{questions[questionId]['imgUrl']}}


<button class="btn" ng-click="yes()">Yes</button>
<button class="btn" ng-click="no()">No</button>
<button class="btn" ng-click="notSure()">Not Sure</button>
<section id="progressbar-timer">
<timer id="countdown" interval="1000" countdown="5" finish-callback="timeout()">
Remaining time : {{countdown}} second{{secondsS}} ({{progressBar}}%). Activity? {{displayProgressActive}} {{kysymys}}
<div class="progress progress-striped {{displayProgressActive}}" style="height: 30px;">
<div class="bar" style="min-width: 2em; height: 30px; width: {{progressBar}}%;">
{{countdown}}
</div>
</div>
</timer>
</section>

<h3 class="counter">
<timer countdown="5" interval="1000" finish-callback="timeout.finished()">{{seconds}} second{{secondsS}} </timer>
</h3>
Timer: <span class="timer-status">{{timeout.status}}</span>




</div>

<script>
angular.module('ajokoeApp', ['timer']).controller('testCtrl', function($scope) {
$scope.questions = [
{id: 0, question:'Can i drive straight?',answer:'a',userAnswer:'',imgUrl:'1.jpg'},
{id: 1, question:'May i turn left?',answer:'b',userAnswer:'',imgUrl:'2.jpg'},
{id: 2, question:'MAy i turn right?',answer:'a',userAnswer:'', imgUrl:'3.jpg'}
];
//functions
$scope.questionId = 0;
$scope.yes = function() {
//instantiate timer
//save data
$scope.questions[$scope.questionId]['userAnswer'] = 'a';
//move to next question
$scope.questionId++;
startTimer('progressbar-timer');

};
$scope.no = function() {
$scope.questions[$scope.questionId]['userAnswer'] = 'b';
$scope.questionId++;
startTimer('progressbar-timer');

};
$scope.notSure = function() {
$scope.questions[$scope.questionId]['userAnswer'] = 'c';
$scope.questionId++;
startTimer('progressbar-timer');

};
$scope.timeout = function() {
startTimer('progressbar-timer');
$scope.questions[$scope.questionId]['userAnswer'] = 'c';
$scope.questionId++;
startTimer('progressbar-timer');
};

//Debug
console.log($scope.questions);
});
</script>

</body>
</html>

最佳答案

我在我的应用程序中遇到了类似的问题,并按如下方式解决了它:对于您尝试更改范围内的每个变量,更改它的方式应该包含在 $scope.$apply() 中.

所以,而不是:

 $scope.no = function() {
$scope.questions[$scope.questionId]['userAnswer'] = 'b';
$scope.questionId++;
startTimer('progressbar-timer');
};

...尝试用 $scope.$apply() 包装内容:

 $scope.no = function() {
$scope.apply(function() {
$scope.questions[$scope.questionId]['userAnswer'] = 'b';
$scope.questionId++;
startTimer('progressbar-timer');
});
};

关于javascript - Angular.js 计时器完成回调方法没有数据绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33642298/

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