Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在链接中使用手表会导致无限的摘要循环。_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 在链接中使用手表会导致无限的摘要循环。

Javascript 在链接中使用手表会导致无限的摘要循环。,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我想写一个指令,把分数和颜色联系起来 我已经试过了,那辆破车是。指令本身如下所示: .directive('scorebox', function () { function link ($scope, $elem, $attr) { var one = 1; $scope.$watch('[score,ptsPossible]', function (newValue) { pctScore = newValue[0] / new

我想写一个指令,把分数和颜色联系起来

我已经试过了,那辆破车是。指令本身如下所示:

.directive('scorebox', function () {
    function link ($scope, $elem, $attr) {
        var one = 1;
        $scope.$watch('[score,ptsPossible]', function (newValue) {
            pctScore = newValue[0] / newValue[1]
            if (pctScore <= 0.4) {
                rating = 'low';
            } else if (pctScore <= 0.6) {
                rating = 'med';
            } else if (pctScore <= 0.8) {
                rating = 'high';
            } else if (pctScore == 1) {
                rating = 'perfect';
            }

            $elem.removeClass();
            $elem.addClass('scorebox');
            $elem.addClass(rating);
            $elem.text(newValue[0] + "/" + newValue[1]);
        });
    };

    return {
        restrict: 'E',
        scope: {
            score: "=",
            ptsPossible: "="
        },
        link:link 
    }
}) 
指令('scorebox',函数(){
功能链接($scope、$elem、$attr){
Var1=1;
$scope.$watch(“[score,ptspobable]”,函数(newValue){
pctScore=newValue[0]/newValue[1]

如果(pctScore只是一个让事情运转起来的建议:

  • 无需对
    $watch
    进行
    评分
    ptsPossible
    ,因为后者在从其相应属性值加载值后不会更改。您还可以访问
    $watch
    回调函数中的
    范围
    变量
  • 这是不寻常的,因为我希望您的
    removeClass()
    也能正常工作。您可以同时在这里尝试
    removeAttr('class')

  • 下面是一个建议更改的示例。

    只是一个让事情正常运行的建议:

  • 无需对
    $watch
    进行
    评分
    ptsPossible
    ,因为后者在从其相应属性值加载值后不会更改。您还可以访问
    $watch
    回调函数中的
    范围
    变量
  • 这是不寻常的,因为我希望您的
    removeClass()
    也能正常工作。您可以同时在这里尝试
    removeAttr('class')

  • 下面是一个建议更改的示例。

    只是一个让事情正常运行的建议:

  • 无需对
    $watch
    进行
    评分
    ptsPossible
    ,因为后者在从其相应属性值加载值后不会更改。您还可以访问
    $watch
    回调函数中的
    范围
    变量
  • 这是不寻常的,因为我希望您的
    removeClass()
    也能正常工作。您可以同时在这里尝试
    removeAttr('class')

  • 下面是一个建议更改的示例。

    只是一个让事情正常运行的建议:

  • 无需对
    $watch
    进行
    评分
    ptsPossible
    ,因为后者在从其相应属性值加载值后不会更改。您还可以访问
    $watch
    回调函数中的
    范围
    变量
  • 这是不寻常的,因为我希望您的
    removeClass()
    也能正常工作。您可以同时在这里尝试
    removeAttr('class')

  • 这里是一个包含建议更改的示例。

    您需要使用
    $watchCollection
    而不是
    $watch
    。您将数组传递给
    $watch
    ,这是
    $watchCollection
    所期望的。

    您需要使用
    $watchCollection
    而不是
    $watch
    。您将数组传递给
    $watch
    这是$watchCollection
    的期望值。

    您需要使用
    $watchCollection
    而不是
    $watch
    。您正在向
    $watch
    传递数组,这是
    $watchCollection
    的期望值。

    您需要使用
    $watchCollection
    而不是
    $watch
    。您正在传递arr可以转到
    $watch
    ,这是
    $watchCollection
    所期望的

  • 正如@miqid所说的,不需要同时关注score和pts,因为你只想在分数变化时做出反应(至少在你目前的情况下)

  • 这里的问题是,您使用的是jqLite的removeClass函数,而不是jQuery的。如果代码中没有在Angular之前包含jQuery,Angular将使用jqLite函数,这类似于jQuery的一个更小、更简单的版本。它也略有不同。jQuery的removeClass(),如果未传递任何参数,则将删除所有类。jqLite不会这样做,它只会删除作为参数传递的类

  • 您根本没有包含jQuery,所以就是这样。这是编辑的。您可以检查jQuery现在包含在顶部,并且一切都按预期工作。而且$watch更简单

  • 正如@miqid所说的,不需要同时关注score和pts,因为你只想在分数变化时做出反应(至少在你目前的情况下)

  • 这里的问题是,您使用的是jqLite的removeClass函数,而不是jQuery的。如果代码中没有在Angular之前包含jQuery,Angular将使用jqLite函数,这类似于jQuery的一个更小、更简单的版本。它也略有不同。jQuery的removeClass(),如果未传递任何参数,则将删除所有类。jqLite不会这样做,它只会删除作为参数传递的类

  • 您根本没有包含jQuery,所以就是这样。这是编辑的。您可以检查jQuery现在包含在顶部,并且一切都按预期工作。而且$watch更简单

  • 正如@miqid所说的,不需要同时关注score和pts,因为你只想在分数变化时做出反应(至少在你目前的情况下)

  • 这里的问题是,您使用的是jqLite的removeClass函数,而不是jQuery的。如果代码中没有在Angular之前包含jQuery,Angular将使用jqLite函数,这类似于jQuery的一个更小、更简单的版本。它也略有不同。jQuery的removeClass(),如果未传递任何参数,则将删除所有类。jqLite不会这样做,它只会删除作为参数传递的类

  • 您根本没有包含jQuery,所以这就是原因