Javascript 将表达式从模板移动到控制器

Javascript 将表达式从模板移动到控制器,javascript,angularjs,json,controller,Javascript,Angularjs,Json,Controller,我有以下控制器 .controller('retrieveSummaryData', [ '$scope', '$http', '$log', function ($scope, $http, $log) { $scope.url = 'data/sub1_example.json'; $scope.search = function(){ angular.element('body').addClass('loading'); $scope.to

我有以下控制器

.controller('retrieveSummaryData', [ '$scope', '$http', '$log', function ($scope, $http, $log) {
    $scope.url = 'data/sub1_example.json';
    $scope.search = function(){
        angular.element('body').addClass('loading');
        $scope.total = 0; // reset the scope total 
        $http.get($scope.url) // get json data
        .success(function(data, status, headers, config) {
            $scope.dataList = data;
            angular.element('.downloadFile').removeClass('disabled');
            angular.element('.colHeader').removeClass('hidden');
            angular.element('body').removeClass('loading');
            console.log(data);
        }).error(function(error, status, headers, config) {
            console.log(status);
        });
    }

}])
在我的模板中,我有以下内容:

<li ng-repeat="data in dataList" class="outputData">
    <ul class="clearfix">
         ....
         <li class="col-md-1 sign">{{data.signage}}</li>
         <li class="col-md-1 sign" ng-class="{valid: data.signage == '+-' || data.balance > 0 && data.signage == '+', invalid: data.balance < 0 && data.signage == '+' // etc}"></li>
    </ul>
</li>
如果我执行
$scope.dataList[0].signage
,我将获得数组中的第一项。我需要在这里写一个循环吗

我的json的一部分示例

[
  {
     "entity":"C-2919",
     "entity_desc":"A & L CF June (3) Limited",
     "account":"S1710008",
     "account":"9706250",
     "account_desc":"CT asset CY tfr group relief",
     "l700_code":"R001000",
     "l700_acc_desc":"S1710008 Corporation tax current yr - group relief settlemen",
     "signage":"-",
     "balance":0.00
  },
  {
     "entity":"C-2919",
     "entity_desc":"A & L CF June (3) Limited",
     "account":"S1710010",
     "walker_account":"9706204",
     "walker_account_desc":"CORP TAX PY - B/F",
     "l700_code":"R001004",
     "l700_acc_desc":"S1710010 Corporation tax prior year - b/f",
     "signage":"+",
     "balance":376949.00
  }, // etc
在控制器中

$scope.IsValid = function(data){
    return data.signage == '+-' || data.balance > 0 && data.signage == '+';
}

$scope.IsInvalid = function(data){
    return data.balance < 0 && data.signage == '+';
}
添加一个方法

$scope.getClass = function(item) {
   var clss;

   // You can put your expression in this function
   // data.signage == '+-' || data.balance > 0 && data.signage == '+', invalid: data.balance < 0 && data.signage == '+' 


   if(item.signage == '+' || item.signage == '+-') {
           clss = 'valid';
   } else if(item.signage == '-') {
           clss = 'invalid';
   }

   return clss;
}
$scope.getClass=函数(项){
var-clss;
//您可以将表达式放入此函数中
//data.signage='+-'| | data.balance>0&&data.signage='+',无效:data.balance<0&&data.signage=='+'
如果(item.signage=='+'| | item.signage=='+-')){
clss=‘有效’;
}否则,如果(item.signage='-'){
clss='无效';
}
返回clss;
}
在你的html中

   <li ng-repeat="data in dataList" class="outputData">
      <ul class="clearfix">
          ....
          <li class="col-md-1 sign">{{data.signage}}</li>
          <li class="col-md-1 sign" class="{{getClass(data)}}"></li>
      </ul>
   </li>
    • ....
    • {{data.signage}
  • 您将在控制器中获得基于表达式的适当类。

    $scope.IsValid = function(data){
        return data.signage == '+-' || data.balance > 0 && data.signage == '+';
    }
    
    $scope.IsInvalid = function(data){
        return data.balance < 0 && data.signage == '+';
    }
    
    添加一个方法

    $scope.getClass = function(item) {
       var clss;
    
       // You can put your expression in this function
       // data.signage == '+-' || data.balance > 0 && data.signage == '+', invalid: data.balance < 0 && data.signage == '+' 
    
    
       if(item.signage == '+' || item.signage == '+-') {
               clss = 'valid';
       } else if(item.signage == '-') {
               clss = 'invalid';
       }
    
       return clss;
    }
    
    $scope.getClass=函数(项){
    var-clss;
    //您可以将表达式放入此函数中
    //data.signage='+-'| | data.balance>0&&data.signage='+',无效:data.balance<0&&data.signage=='+'
    如果(item.signage=='+'| | item.signage=='+-')){
    clss=‘有效’;
    }否则,如果(item.signage='-'){
    clss='无效';
    }
    返回clss;
    }
    
    在你的html中

       <li ng-repeat="data in dataList" class="outputData">
          <ul class="clearfix">
              ....
              <li class="col-md-1 sign">{{data.signage}}</li>
              <li class="col-md-1 sign" class="{{getClass(data)}}"></li>
          </ul>
       </li>
    
    • ....
    • {{data.signage}

  • 您将获得基于表达式的适当类。

    您可以创建两个方法并将
    数据作为参数传递

    <li class="col-md-1 sign" ng-class="{valid: IsValid(data), invalid: IsInvalid(data) // etc}"></li>  
    
  • 和在控制器上

    $scope.IsValid = function(data){
        return data.signage == '+-' || data.balance > 0 && data.signage == '+';
    }
    
    $scope.IsInvalid = function(data){
        return data.balance < 0 && data.signage == '+';
    }
    
    $scope.IsValid=函数(数据){
    返回data.signage='+-'| | data.balance>0&&data.signage=='+';
    }
    $scope.IsInvalid=函数(数据){
    返回data.balance<0&&data.signage=='+';
    }
    
    您可以创建两个方法并将
    数据作为参数传递

    <li class="col-md-1 sign" ng-class="{valid: IsValid(data), invalid: IsInvalid(data) // etc}"></li>  
    
  • 和在控制器上

    $scope.IsValid = function(data){
        return data.signage == '+-' || data.balance > 0 && data.signage == '+';
    }
    
    $scope.IsInvalid = function(data){
        return data.balance < 0 && data.signage == '+';
    }
    
    $scope.IsValid=函数(数据){
    返回data.signage='+-'| | data.balance>0&&data.signage=='+';
    }
    $scope.IsInvalid=函数(数据){
    返回data.balance<0&&data.signage=='+';
    }
    
    您可以添加函数以返回布尔值

    $scope.validQuery = function (data) {
      return (data.signage === '+-' || data.balance > 0 && data.signage ==   '+');
    }
     $scope.invalidQuery = function (data) {
       return (data.signage === '-' && data.balance < 0);
    }
    

    可以添加函数以返回布尔值

    $scope.validQuery = function (data) {
      return (data.signage === '+-' || data.balance > 0 && data.signage ==   '+');
    }
     $scope.invalidQuery = function (data) {
       return (data.signage === '-' && data.balance < 0);
    }
    

    谢谢,我对这个答案投了票,它在其他方面也帮助了我。谢谢,我对这个答案投了票,它在其他方面也帮助了我。