Javascript js中对象属性访问的处理
下面是我的js的样子Javascript js中对象属性访问的处理,javascript,angularjs,Javascript,Angularjs,下面是我的js的样子 $scope.tasks = [ { "name":"task 1", "date":"2 May 2014" }, {"name":"task 2", "date":"2 May 2014" } ]; html {{task.name} 我想尽量避免{{task.name}}以保持标记更干净。我尝试了$scope.tasks=$scope.tasks.name在JS中,但它不工作 $scope.tasks
$scope.tasks = [
{
"name":"task 1",
"date":"2 May 2014"
},
{"name":"task 2",
"date":"2 May 2014"
}
];
html
- {{task.name}
我想尽量避免{{task.name}}
以保持标记更干净。我尝试了$scope.tasks=$scope.tasks.name代码>在JS
中,但它不工作
$scope.tasks = [
{
"name":"task 1",
"date":"2 May 2014"
},
{"name":"task 2",
"date":"2 May 2014"
}
];
var temp = [];
for(var task in $scope.tasks){
temp.push(task.name);
}
$scope.tasks = temp;
这会满足你的要求。但是,它将覆盖您的原始对象
我认为你把事情搞得太复杂了,很难理解角度的基本概念
就我个人而言,我甚至认为这会让事情变得更糟。在ng repeat
中,您告诉Angular它应该在tasks
中列出每个任务。然后,它应该显示每个任务的名称。这显然就是任务名akatask.name
。通过省略术语任务
,您的代码将更难阅读,因为您看不出名称的含义。以下是如何做到这一点
在控制器中,您需要监视更改:
// Run whenever tasks changes.
$scope.$watch("tasks", function(tasks) {
// Tasks may be be undefined or nil.
if (tasks) {
// Map the array to pick out the titles.
$scope.taskTitles = tasks.map(function(task) { return task.title })
}
}
如果不这样做,您的列表将不会在任务更改时更新。这种“观察”是角度测量的一个基本部分
然后在模板中需要迭代
<ul ng-repeat="task in taskTitles track by $index">
<li>{{task}}</li>
</ul>
- {{task}}
如果您的标题有可能重复,您需要曲目
所以你可以做,但它不干净。我建议你坚持你所拥有的。你为什么要避免这种情况?为什么您认为它会使您的标记更干净?当然,这一更改意味着使其他地方的代码复杂化。@Joe,正如您所看到的,我必须在标记中键入task.name。如果这只是一项任务,那就太好了。我希望在我的js中,我可以使tasks=tasks.name。“这会很好”有时是一个很好的理由,但很少。如果这意味着在其他地方使代码复杂化,那么这是个坏主意。依我拙见您的逻辑是“迭代任务并显示每个任务的名称”,而您当前的代码是最干净的表达方式。我已经添加了一个答案,说明如何做到这一点。它回答了你关于如何做的问题,也表明它看起来不太好看。不,不会的。它打破了观察任务变化的模板。@Joe所说的当然是正确的。我忘了提到,您必须应用进一步的更改才能使其工作,很明显,因为您的ng repeat依赖于原始对象
<ul ng-repeat="task in taskTitles track by $index">
<li>{{task}}</li>
</ul>