Javascript 在AngularJS中有条件地绑定数据

Javascript 在AngularJS中有条件地绑定数据,javascript,angularjs,data-binding,Javascript,Angularjs,Data Binding,我有一系列的任务。它们有标题和标签 function Task(taskTitle, taskType) { this.title = taskTitle; this.type = taskType; } $scope.tasks = []; 我最终声明了一系列不同类型的任务,并将它们添加到数组中 在我的html中,我显示了一列按任务类型过滤的卡片: <div ng-model="tasks"> <div class="card" ng-repeat="abc

我有一系列的任务。它们有标题和标签

function Task(taskTitle, taskType) {
  this.title = taskTitle;
  this.type = taskType;
}

$scope.tasks = [];
我最终声明了一系列不同类型的任务,并将它们添加到数组中

在我的html中,我显示了一列按任务类型过滤的卡片:

<div ng-model="tasks">
  <div class="card" ng-repeat="abc in tasks track by $index" ng-show="abc.type==0">
    <p> {{ abc.title }} </p>
  </div>
</div>
我的直觉是这样做(在javascript中):

//伪代码!
$scope.inboxTasks=[];

对于(i=0;i您可以过滤ng重复:


{{abc.title}}

此外,通过将过滤后的数据保存在单独的列表中,您可以如下所示显示下一个任务:

<div>
  <h4>Title of first card:</h4>
  <p> filteredData[0].title </p>
</div>

第一张卡片的标题:
filteredData[0]。标题


您的数据将在“处理”任务时自动更新。

要更新Inbox任务,您可以使用
$watchCollection

$scope.inboxTasks = [];

$scope.$watchCollection('tasks', function(newTasks, oldTasks)
{
   for (i=0; i<newTasks.length(); i++) 
   {
      if(newTasks[i].type == 0) 
      {
         $scope.inboxTasks.append(tasks[i]);
      }
   }
});
$scope.inboxTasks=[];
$scope.$watchCollection('tasks',函数(newtask,oldTasks)
{

对于(i=0;i其他答案帮助我指出了正确的方向,但我是如何让它工作的:

HTML

$watch
的第三个参数设置为
true
,意味着对我的
任务
数组中的任何数据进行任何更改都会触发
watch
函数。这就是所谓的平等表,它显然计算量更大,但正是我所需要的

对一个类似的问题有很好的评论,也有很好的技巧


ng show=“abc.type==0&&$index>0”怎么样然后,
splice
-从数组中提取第一个值将导致绑定更新。更新以删除对自定义筛选器的需要内联筛选将起作用,但如何“保存”
filteredData
?这不应该绑定到在
$scope
中声明的某个对象吗?无需声明它。将初始化Filteredata变量,您的$scope将可以访问它。Scott,我可能会研究该选项。在这段代码中,
newTasks
oldstasks
指的是什么?只是进一步研究了它-这是一个语法问题。实际上,我只需使用
$watch
就可以解决这个问题。
<div ng-model="tasks">
  <div class="card" ng-repeat="abc in filteredData = (tasks | filter: {type==0}) track by $index">
    <p> {{ abc.title }} </p>
  </div>
</div>
<div>
  <h4>Title of first card:</h4>
  <p> filteredData[0].title </p>
</div>
$scope.inboxTasks = [];

$scope.$watchCollection('tasks', function(newTasks, oldTasks)
{
   for (i=0; i<newTasks.length(); i++) 
   {
      if(newTasks[i].type == 0) 
      {
         $scope.inboxTasks.append(tasks[i]);
      }
   }
});
<input ng-model="inboxEditTitle" />
$scope.filteredArray = [];
$scope.$watch('tasks',function(){
       $scope.filteredArray = filterFilter($scope.tasks, {type:0});
       $scope.inboxEditTitle = $scope.filteredArray[0].title;
    },true); // the 'true' keyword is the kicker