1

如何从 GoInstant GoAngular 集合中获取单个项目?我正在尝试为单个任务创建典型的显示或编辑屏幕,但我无法显示任何任务数据。

这是我的 AngularJS 控制器:

.controller('TaskCtrl', function($scope, $stateParams, $goKey) {

    $scope.tasks = $goKey('tasks').$sync();

    $scope.tasks.$on('ready', function() {
        $scope.task = $scope.tasks.$key($stateParams.taskId);
        //$scope.task = $scope.tasks.$key('id-146b1c09a84-000-0'); //I tried this too
    });
});

这是相应的 AngularJS 模板:

<div class="card">
    <ul class="table-view">
        <li class="table-view-cell"><h4>{{ task.name }}</h4></li>
    </ul>
</div>

{{ task.name }} 或通过引用任何任务的属性不会呈现任何内容。任何帮助将不胜感激。

4

1 回答 1

4

您可能会处理以下任务:(a) 从集合中检索单个项目,以及 (b) 响应用户指示以不同方式更改应用程序状态。

请记住,GoAngular 模型(由 返回$sync())是一个对象,在 todos 集合的情况下,它可能看起来像这样:

{  
    "id-146ce1c6c9e-000-0": { "description": "Destroy the Death Start" },
    "id-146ce1c6c9e-000-0": { "description": "Defeat the Emperor" }
}

当然,它也有许多方法,可以使用该$omit方法轻松剥离。

如果我们想从已经同步的集合中检索单个项目,我们可以这样做(plunkr):

$scope.todos.$sync();

$scope.todos.$on('ready', function() {
  var firstKey = (function (obj) {
    for (var firstKey in obj) return firstKey;
  })($scope.todos.$omit());

  $scope.firstTodo = $scope.todos[firstKey].description;
});

在此示例中,我们同步集合,一旦它准备好检索集合中第一个项目的键,并将对该项目的引用分配给$scope.firstTodo.

如果我们正在响应用户输入,我们需要根据用户的交互将 ID 从视图传递回控制器。首先我们将更新我们的视图:

  <li ng-repeat="(id, todo) in todos">
      <a href="#" ng-click="whichTask(id)">{{ todo.description }}</a>
  </li>

现在我们知道用户想要我们修改哪个待办事项,我们在控制器中描述该行为:

$scope.todos.$sync();

$scope.whichTask = function(todoId) {
  console.log('this one:', $scope.todos[todoId]);

  // Remove for fun
  $scope.todos.$key(todoId).$remove();
}

这是一个工作示例:plunkr。希望这可以帮助 :)

于 2014-06-24T14:01:16.477 回答