【发布时间】:2014-11-06 20:17:22
【问题描述】:
我被请来修复几个月前起火的网站。我已经控制了大部分事情,我正在修复各种愿望清单项目。其中一个涉及一些我似乎无法做我想做的事情的角度代码。在某些页面上有视频,然后是一个简短的测验。我需要在每次活动后更新用户的分数。到目前为止,事实证明这很容易得到如下所示的总分:
<a id="updateafterscore" href="~/user/leaderboard/" class="fill-div">
{{ profile.currentScore }}
</a>
然后更新了这个:
document.getElementById('updateafterscore').innerHTML = data.Data.CurrentScore;
到目前为止,一切都很好。然而,到目前为止,页面上的其他元素已被证明无法更新。这是页面上的内容:
我自己添加了“id="refreshvideo",因此我可以尝试更改标签。最后,这是 simple-circle 的 angular 模块(我省略了实际的绘图代码,因为它并不真正相关):
angular.module('thrive.shared').directive('simpleCircle', function() {
return{
replace: true,
template: '<canvas width="60" height="60" style="margin: -10px 0 0 -15px;"></canvas>',
restrict: 'E',
scope: {
value: '@',
color: '@',
bgColor: '@',
forecolor: '@',
radius: '@'
},
link: function (scope, elem, attrs) {
var multiplyLength = 1;
var canvasElem = elem[0];
var inMotion = false;
if (scope.value <= 2) {
multiplyLength = 5;
}
scope.$watch('value', function() {
drawCircle(canvasElem, scope.color, scope.value * multiplyLength, scope.value, scope.name);
});
function drawCircle(canvas, color, calculatedPoints, displayPoints, name) {
那么,问题是:我到底要如何更新显示的数字?我尝试了各种方法:
document.getElementById('refreshvideo').setAttribute('value', data.Data.VideoWatchedCount);
document.getElementById('refreshvideo').setAttribute('data-value', data.Data.VideoWatchedCount);
$scope.profile.videosWatched = data.Data.VideoWatchedCount;
这些都不起作用。我在浏览器的源代码中检查了 canvas 元素,我可以看到 value 和 data-value 标签更改为我设置的任何内容,但图像保持不变。我设置错了吗? (也许 $watch 正在观看)我是否必须强制对 canvas 元素进行某种重新绘制?
【问题讨论】:
-
方法全错了。 Angular 将根据控制器和指令中范围模型变量的值更新实时 html
-
"approach is all wrong" 定义了这个项目。我没有创建它。尽管如此,我仍然需要对上面描述的内容做一些事情。从哪里开始快速解决此问题的线索会有所帮助。
标签: javascript jquery html angularjs canvas