AngularJS自定义过滤器用于突出显示文本

时间:2016-10-05 07:43:20

标签: html angularjs

我在表上创建了一个过滤器。代码如下:

<table id="tableText" class="table table-hover table-striped" ng-init="allNews()">
  <tr>
    <td colspan="5">
      <input type="text" placeholder="Ricerca testo" class="form-control" ng-model="inputText">
    </td>
  </tr>

  <tr>
    <th>Titolo</th>
    <th>Text</th>
    <th>Disattivato</th>
    <th>Modifica</th>
    <th ng-if="!cancelDelete">Elimina</th>
    <th ng-if="cancelDelete">Annulla</th>
  </tr>

  <tr ng-repeat="news in allNews | filter : inputText">
    <td>
      <div ng-hide="editingData[news.id]"><span ng-bind-html="news | deleteTitle"></span></div>
      <div ng-show="editingData[news.id]"><input type="text" class="form-control" ng-model="news.title" /></div>
    </td>

    <td>
      <div ng-hide="editingData[news.id]"><span ng-bind-html="news | deleteText"></span></div>
      <div ng-show="editingData[news.id]"><input type="text" class="form-control" ng-model="news.arg" /></div>
    </td>

    <td>
      <div ng-hide="editingData[news.id]"><input type="checkbox" disabled ng-model="news.isDeleted"></div>
      <div ng-show="editingData[news.id]"><input type="checkbox" ng-model="news.isDeleted"></div>
    </td>

    <td>
      <div ng-hide="editingData[news.id]"><button id="modify" class="btn btn-primary" ng-click="modify(news, $event)">Modifica</button></div>
      <div ng-show="editingData[news.id]"><button id="accept" class="btn btn-success" ng-click="update(news)">Accetta</button></div>
    </td>

    <td>
      <div ng-hide="editingData[news.id]"><button id="delete" class="btn btn-danger" ng-click="delete(news.id)">Cancella</button></div>
      <div ng-show="editingData[news.id]"><button id="cancel" class="btn btn-danger" ng-click="cancelModify()">Annulla</button></div>
    </td>
  </tr>
</table>

表中的条目是从db:

中读取的
$scope.allNews = function () {
  var url = '/data_db.asmx/GetAllNews';
  var obj = {};
  $http.post(url, obj)
  .success(
    function (response) {
      if (response.Error) {
        console.log('Server error');
      }
      else {
        $scope.allNews = response.d;
      }
    })
  .error(
    function (response) {
      console.log('Unkwnow error.');
    });
}

我想突出显示在表格第一行搜索的文字。现在,我收到此错误:

  

angular.js:13920错误:[filter:notarray]预期数组但收到:function()

但过滤器有效。

1 个答案:

答案 0 :(得分:1)

您的问题是functionng-repeat。当您在allNews指令中使用它并且首次计算指令时,您的角度将尝试将$scope的{​​{1}}属性作为数组进行检查。

第一次调用该函数时(当角度第一次出错时可能永远不会发生这种情况),它会用allNews POST请求的结果数组覆盖$http属性。

重命名函数或属性,并将ng-repeat绑定到它收到的数组(并且可能用空数组初始化它,直到它被$http结果填充)。

类似的东西:

$scope.allNews = [];

$scope.getAllNews = function() {
var url = '/data_db.asmx/GetAllNews';
var obj = {};
  $http.post(url, obj)
  .success(
    function (response) {
      if (response.Error) {
        console.log('Server error');
      }
      else {
        $scope.allNews = response.d;
      }
    })
  .error(
    function (response) {
      console.log('Unkwnow error.');
    });
}

或者尝试使用ngResource,创建一个服务并将其注入您的控制器。然后通过访问服务来填充数组。