如何在$ scope外使用函数(错误:函数未定义)

时间:2016-06-20 20:28:44

标签: javascript angularjs

我有一个rzslider,它为残疾人带来了真或假。我希望基于函数禁用true。所以我想把它disabled:$scope.truthy

我有一个名为checkDupsName()的函数,如果有重复,checkDupsName应返回true,否则返回false。如果函数返回true,我将$ scope.truthy变量设置为true,但问题是,当我在此函数之外调用它时(在我的滑块中),它始终为false。

   $scope.checkDupsName = function(Mylist) {
                var i, j, n;
                n = Mylist.length;
                for (i = 0; i < n; i++) {
                    for (j = i + 1; j < n; j++) {
                        if (Mylist[i] === Mylist[j]) {
                            return true;

                        }

                    }
                }

                return false;


            };

$scope.truthy=false;
  $scope.nameList = [];
  var Types = [];

   $scope.loadRuleList = function() {  



                PrioritizeService.getData($scope.prioritizeURL).
                then(function(response) {
                        if (response) {
                            Types = response;
                        }                              


                        for (var k = 0; k < Types.length; k++) {
                           $scope.nameList.push(Types[k].name);
                        } 



                        if($scope.checkDupsName($scope.nameList)) {
                          $scope.truthy=true;
                        }                     

            };

$scope.slider = {
                value: 1,
                options: {
                    floor: 0,
                    ceil: 3,
                    showTicks: true,
                    showTicksValues: true,
                    disabled:$scope.truthy

                }
            };

1 个答案:

答案 0 :(得分:2)

您正在函数内部定义它然后被调用。您应该将其移到外部并使其成为在作用域上定义/声明的函数,并使其将其用作参数的数据。

// initialize it so your code does not blow up in the case of forgotten undefined or null check
$scope.nameList = []; 

$scope.loadRuleList = function() {
    var me = this;
    PrioritizeService.getData($scope.MyURL).
    then(function(response) {

        if (response) {
            Types = response;    
        }                      

        // re-init the nameList field
        me.nameList = [];
        for (var k = 0; k < Types.length; k++) {
            me.nameList.push(Types[k].name)
        }
        //check for duplicates
        var areDups = me.checkDupsName(me.nameList);
    }
}

$scope.checkDupsName = function(listToCheck) {
    var i, j, n;
    n = listToCheck.length;
    for (i = 0; i < n; i++) {
        for (j = i + 1; j < n; j++) {
            if (listToCheck[i] === listToCheck[j]) {
                return true;
            }
        }
    }    
    return false;    
}