2016-06-20 9 views
0

私はrzsliderを持っています。私は機能に基づいて真であることを無効にしたい。だから私はそれをしたい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 

       } 
      }; 
+0

あなたは 'then'によって呼び出される関数の中で定義しています。それを外側に移動し、代わりに 'scope'で定義/宣言された関数にして、それがパラメータとして使うデータを取る必要があります。 – Igor

+1

私はそれを上に移動するので、パラメータとしてnameListを渡すことはできますか? – Angular

答えて

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;  
} 
+0

私は今何を私のスライダーに入れますか?無効:$ scope.checkDupsname(nameList)? – Angular

+0

@Angular - '$ scope'も常にチェックしたいデフォルトの配列を持たない限り、パラメータを渡す必要があります。その場合は上記の私のコードを変更し、代わりにそれを使用してください。 'nameList'は' $ scope'で定義された変数ですか?あなたのメソッドでは、 'then'関数で宣言されたローカル変数を探します。 – Igor

+0

パラメータにnameListを渡したいと思います。それはcheckDupsname関数内のローカル変数なので、私はちょうどそれを行うことはできませんか? – Angular

関連する問題