如何在更新角度视图之前操作从JSON响应派生的对象
How can I manipulate an object derived from a JSON response before my angular view is updated?
我遇到了一个场景,需要接受以下JSON响应:
[
{
"url":"http://myurl1",
"tags":"tag 1.1,tag1.2,tag1.3"
},
{
"url":"http://myurl2",
"tags":"tag 2.1,tag2.2"
}
]
最终得到:
<a href="http://myurl1">tag 1.1</a>
<a href="http://myurl1">tag 1.2</a>
<a href="http://myurl1">tag 1.3</a>
<a href="http://myurl2">tag 2.1</a>
<a href="http://myurl2">tag 2.2</a>
我在jQuery中构建了这一点,只需在每个循环中存储url,将标签拆分成一个数组,然后循环输出到<a>
标签,同时拉入之前存储的url的单个实例。不过,我真的很努力地切换到角度,这基本上就是我所拥有的。我有一种感觉,我太复杂了,信不信由你,我已经搜索了很长时间,已经搜索了几个小时。
如果json数据是平坦的,我会完成,但由于不是,我陷入了困境。
我得到了这个,这很好,而且它将所有标签都转储到一个<a>
元素中,而不是我需要的。我假设我不会在这里创建嵌套循环,所以在控制器上:
标记:
<body ng-app="MyApp">
<div ng-controller="TagCtrl">
<a ng-repeat="tag in tags" href="{{tag.url}}">{{tag.tags}}</a>
</div>
</body>
控制器:
app.controller("TagCtrl", function($scope, $http) {
$http.get('data/tags.json').
success(function(data, status, headers, config) {
$scope.tags = data;
}).
error(function(data, status, headers, config) {
// log error
});
});
我只是不知道在哪里可以将标记数据分割成一个数组并循环使用,即使我这样做了,我该如何将其返回到视图中?我的直觉告诉我,这应该是一个指令,但我现在正在努力保持尽可能简单。
最后一件事,我没有能力更改JSON结构。
你可以做:
success(function(data, status, headers, config) {
$scope.tags = [];
data.forEach(function(urlObject) {
// Get array of tags from the string of tags
var tagsList = urlObject.tags.split(',');
tagsList.forEach(function(tag) {
$scope.tags.push({
url: urlObject.url,
tag: tag
});
});
});
})
然后使用相同的HTML。
从json响应(我们称之为data
):
var tags = [];
// Loop on every response item
for (var i = 0; i < data.length; i++) {
// Get all tags from this response item
var splits = data[i].tags.split(',');
for (var j = 0; j < splits.length; j++) {
tags.push({url: data[i].url, tag: splits[i]});
}
}
// Put the array into our scope
$scope.tags = tags;
然后你可以使用你的模板:
<a ng-repeat="tag in tags" href="{{tag.url}}">{{tag.tag}}</a>
当前您正在尝试显示$scope上还不存在的值。即"标签"。$scope上唯一的变量是posts。如果你想以当前的方式继续,你的html需要如下:
<body ng-app="MyApp">
<div ng-controller="TagCtrl">
<div ng-repeat="post in posts">
<a ng-repeat="tag in post.tags" href="{{post.url}}">{{tag}}</a>
</div>
</div>
</body>
然而,这不会把你的标签分开。我还没有测试过,但它应该可以工作:
(function(){
app.controller('tagCtrl', tagCtrl);
tagCtrl.$inject = ['$scope', '$http'];
function tagCtrl($scope, $http){
$scope.posts = [];
$http.get('data/tags.json')
.success(function(data){
$scope.posts = data;
$scope.posts.forEach(function(post){
post.splitTags = post.tags.split(",");
});
})
.error(function(data, status, headers, config) {
// log error
});
}
})();
<body ng-app="MyApp">
<div ng-controller="tagCtrl">
<div ng-repeat="post in posts">
<a ng-repeat="tag in post.splitTags" href="{{post.url}}">{{tag}}</a>
</div>
</div>
</body>
相关文章:
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 使用Angular JS for WordPress JSON API使用JSON操作数据
- 排序和操作json对象,javascript
- 使用LoDash操作JSON
- 将JSON对象列表传递给操作
- asp.net mvc操作方法发布除json数据之外的数据
- 试图执行JSON.parse,但它不喜欢我使用服务器返回的字符串所做的操作
- 如何在javascript中动态操作json数据
- 对JSON对象进行操作,使其适合高图表
- 使用纯JavaScript或Lodash的JSON数组操作
- 将JSON从索引操作服务到公用文件夹中的index.html
- 如何操作JSON对象以删除Javascript中的根键
- 用javascript格式化/操作JSON响应
- 如何将json从php传递到js并对其进行操作
- 如果我只使用POST,那么我的MVC JSON操作怎么能用GET调用呢
- 使用 JQuery 或 Javascript 操作 JSON
- 如何在 Web 服务器中操作 JSON 类型
- 在 Node JS 中获取、操作和编写(响应)巨大 JSON 的最佳方式
- 使用 jquery 操作 JSON 数组
- JSON-操作元素