【问题标题】:how to check the result returned by filter in null or not and if it is null need to call a function in the controller如何检查filter返回的结果是否为null,如果为null需要调用控制器中的函数
【发布时间】:2015-05-02 10:26:20
【问题描述】:

需要检查过滤器test_id返回的list结果,如果list为null需要调用控制器中的函数。

<div class="test_list"> 
              <ul>
                <p> testID :{{test_id}}</p>-->
                 <li ng-repeat="test in test_list | filter: test_id">
                    {{test}}
                 </li>
              </ul>

         </div>

提前致谢。

【问题讨论】:

  • 为什么不在过滤器testId定义中检查呢?
  • 你能详细说明一下吗..
  • 你能不能给一个plunker或显示你的自定义过滤器的定义
  • 我有一个设置了过滤器的搜索过滤器。只要我开始在搜索框中输入内容,下面的列表就会根据我需要跟踪的过滤器进行填充,这样当列表为空我需要相应地调用一个函数。我猜 $scope.watch 没有解决我的问题。在此先感谢
  • 现在我不能,因为我坐在绿色区域的安全网络中。很抱歉给您带来不便。如果有帮助,我可以再提出一个问题并在此处提供链接

标签: angularjs filter controller


【解决方案1】:

您可以在自己的自定义过滤器中使用内置的filter 过滤器。

.filter('checknull', function($filter) {
    return function(x, test) {
        var result = $filter("filter")(x, test);
        if (result.length <= 0)
            myFunc();
        return result;
    }
});

Fiddle Here

【讨论】:

  • 它在注射器中显示一些错误..谢谢 Divya]
  • 你能看看 jsfiddle 吗?你遇到了什么错误,你想在哪里注入什么?
【解决方案2】:

你只需要一个自定义过滤器就可以了 :-)

<div ng-app="myapp">
    <div ng-controller="test">
        <input type="text" ng-model="search">
    <div ng-repeat="data in myData | filterData:search">
    {{ data.ID }}
    {{ data.Message }}
</div>
    </div>
</div>
angular.module('myapp',[])
.controller('test',function($scope){
    $scope.myData = [
    {
       "ID" : "001",
       "Message" : "test test test test"
    },
    {
       "ID" : "002",
       "Message" : "test test test test"
    },
    {
       "ID" : "003",
       "Message" : "test test test test"
    },
    {
       "ID" : "004",
       "Message" : "test test test test"
    },
    {
       "ID" : "005",
       "Message" : " "
    },
    {
       "ID" : "006",
       "Message" : "test test test test"
    },
    {
       "ID" : "007",
       "Message" : "test test test test"
    },
    {
       "ID" : "007",
       "Message" : null
    }
];
})
.filter('filterData',function(){
    return function(data,search) {
        if(!search || search.length<3){
        return data;
        }
        var dataToBePushed = [];
        for(var i=0;i<data.length;i++){
            if(data[i].ID==search){
            dataToBePushed.push(data[i]);
            }
        }
        if(dataToBePushed.length==0){
        alert("My function");
        }else{
        return dataToBePushed;
        }
    }
});

PS:- 我检查了长度为 3 之后的搜索,但它可能会帮助您理清思路,您可以根据自己的要求进行操作。

Fiddle

【讨论】:

  • 添加自定义过滤器后,控制台中显示给我的错误是“$scope.filter 不是函数”,即使在控制器中添加了 $filter 作为注入器。
  • 准确来说错误是 TypeError: $scope.filter is not a function
  • 您需要将过滤器与应用程序绑定,而不是像“angular.module('myapp',[]) .filter”这样的范围
【解决方案3】:

在控制器中添加一个监视列表变量并以编程方式对其进行过滤,如果发现为空,则调用必要的函数。

$scope.$watch("test_id", function(new_test_id) {
     //inject $filter service in your main controller
     var filtered_test_val=$filter('filter')($scope.test_val, new_test_id, false);
     if(angular.isUndefined(filtered_test_val) || filtered_test_val== null)
      {
         //call your function here.
      }     
}

【讨论】:

  • 我有一个设置了过滤器的搜索过滤器。只要我开始在搜索框中输入内容,下面的列表就会根据我需要跟踪的过滤器进行填充,这样当列表为空我需要相应地调用一个函数。我猜 $scope.watch 没有解决我的问题。在此先感谢
  • 好的。然后我们在搜索框中添加监视输入的值并相应地计算过滤值。我已经编辑了答案。你能检查它是否有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 2012-08-19
相关资源
最近更新 更多