如何从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}}或引用任何任务的属性都不会呈现任何内容。任何帮助将不胜感激。
答案 0 :(得分:4)
您可以处理以下任务:(a)从集合中检索单个项目,以及(b)响应用户指示以不同方式更改应用程序状态。
请记住,GoAngular model(由$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>
现在我们知道用户想要修改哪个todo,我们在控制器中描述了这种行为:
$scope.todos.$sync();
$scope.whichTask = function(todoId) {
console.log('this one:', $scope.todos[todoId]);
// Remove for fun
$scope.todos.$key(todoId).$remove();
}
以下是一个工作示例:plunkr。希望这会有所帮助:)