0

我有一个带有 toggleFilter 按钮的 ui-grid:

$scope.gridOptions = {
  ...  
  enableFiltering: false,
  ...
}

$scope.toggleFilter = function () {
  $scope.gridOptions.enableFiltering = !$scope.gridOptions.enableFiltering;
  $scope.gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);
};

<div id="filter" ng-click="toggleFilter()">
  ({{$scope.gridOptions.enableFiltering ? "-" : "+"}}) {{$scope.gridOptions.enableFiltering ? "Dis" : "En"}}able Filtering
</div>

切换按预期工作,并且文本在加载时显示正确,但不会随着enableFiltering. 正确绑定此属性缺少什么?

4

2 回答 2

2

从您的 HTML 中删除 $scope。

({{gridOptions.enableFiltering ? "-" : "+"}}) {{gridOptions.enableFiltering ? "Dis" : "En"}}able Filtering

在这里工作的 plunker https://plnkr.co/edit/vT6Ae8aJXrqonhq8ueKQ?p=preview

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
  
  $scope.gridOptions = {
  
  enableFiltering: false,
  
}

$scope.toggleFilter = function () {
  $scope.gridOptions.enableFiltering = !$scope.gridOptions.enableFiltering;
  //$scope.gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);
};
  
  
});
<!DOCTYPE html>
<html ng-app="plunker">

<head>
  <meta charset="utf-8" />
  <title>AngularJS Plunker</title>
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <link rel="stylesheet" href="style.css" />
  <script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.20/angular.js" data-semver="1.3.20"></script>
  <script src="app.js"></script>
</head>

<body ng-controller="MainCtrl">
  <div id="filter" ng-click="toggleFilter()">
    ({{gridOptions.enableFiltering ? "-" : "+"}}) {{gridOptions.enableFiltering ? "Dis" : "En"}}able Filtering
  </div>

</body>

</html>

于 2017-02-21T16:06:18.970 回答
0

这是我的方法的一个笨蛋:https ://jsfiddle.net/frishi/psysv1ao/2/

我认为您的三元表达式永远不会被评估,您不需要$scope在视图中使用它来访问它的属性。这是暗示的。

其次,这是我的观点,控制 DOM 渲染的三元组非常不可读。请考虑使用ng-iforng-show来实现 DOM 的条件渲染。

于 2017-02-21T16:27:29.147 回答