将对象保存到 angularjs 中的 JSON 文件?
Save object to JSON file in angularjs?
我是 angularjs 的新手,正在尝试创建单页应用程序。我有一个代码非常简单的家庭控制器。类似于 this tutorial
Angular JS 控制器使用如下代码初始化:
var phonecatApp = angular.module('phonecatApp', []);
phonecatApp.controller('PhoneListCtrl', function ($scope) {
$scope.phones = [
{'name': 'Nexus S',
'_id': 1,
'snippet': 'Fast just got faster with Nexus S.'},
{'name': 'Motorola XOOM™ with Wi-Fi',
'_id': 2,
'snippet': 'The Next, Next Generation tablet.'},
{'name': 'MOTOROLA XOOM™',
'_id': 3,
'snippet': 'The Next, Next Generation tablet.'}
];
});
但在生产数据中可能不会如此整齐地打包。现在我的问题是:
我可以创建一个下载 link 到我的对象的 JSON 表示吗?
<li ng-repeat="phone in phones">
<a
href="data:text/json;charset=utf-8,{{encodeURIComponent(JSON.stringify(phone))}}"
download="{{phone._id}}.json">
JSON
</a>
</li>
我基本上想用格式化函数encodeURIComponent(JSON.stringify(phone))
访问当前对象phone
。
有没有办法巧妙地做到这一点?
I basically want to access the current object phone with the formatting function encodeURIComponent(JSON.stringify(phone)).
您只需向您的控制器添加一个方法:working example (collections)
$scope.encodeJson = function(phone) {
return encodeURIComponent(JSON.stringify(phone));
}
<a href="data:text/json;charset=utf-8,{{encodeJson(data)}}" download="{{filename}}">
您可能还需要sanitize the URL
集合基本相同:
<p ng-repeat="item in collection">
<a href="data:text/json;charset=utf-8,{{encodeJson(item)}}" download="{{item.id}}.json">
</p>
此外,您可能需要通过在 ng-repeat 中使用 "track by item.id" 语法删除由 ng-repeat 添加的 $$HashKey。
另一种方法 可以将这些函数添加到 $scope
本身并在 ng-* 属性中使用它们。
$scope.encodeURIComponent = encodeURIComponent;
$scope.JSON = JSON;
感谢rnrneverdies的建议,我在配置中添加了以下内容
phonecatApp.config(['$compileProvider', function ($compileProvider) {
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|file|data|blob):/);
}]);
并将这些函数添加到控制器中的 $scope
$scope.stripClone = function(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr) && attr != '$$hashKey') {
var obj_attr = obj[attr];
if (typeof obj_attr == "object"){
copy[attr] = this.stripClone(obj_attr);
} else if (typeof obj_attr == "array"){
copy[attr] =[];
for(var i =0; i<obj_attr.length; i++){
copy[attr].push(this.stripClone(obj_attr));
}
}else{
copy[attr] = obj_attr;
}
}
}
return copy;
};
$scope.myEncodeJson = function(obj){
return JSON.stringify(this.stripClone(obj));
};
我现在可以在模板中调用这些函数来实现我想要的 json 魔法:
<a ng-href="data:text/json;charset=utf-8,{{myEncodeJson(phone)}}
感谢您的帮助
我是 angularjs 的新手,正在尝试创建单页应用程序。我有一个代码非常简单的家庭控制器。类似于 this tutorial
Angular JS 控制器使用如下代码初始化:
var phonecatApp = angular.module('phonecatApp', []);
phonecatApp.controller('PhoneListCtrl', function ($scope) {
$scope.phones = [
{'name': 'Nexus S',
'_id': 1,
'snippet': 'Fast just got faster with Nexus S.'},
{'name': 'Motorola XOOM™ with Wi-Fi',
'_id': 2,
'snippet': 'The Next, Next Generation tablet.'},
{'name': 'MOTOROLA XOOM™',
'_id': 3,
'snippet': 'The Next, Next Generation tablet.'}
];
});
但在生产数据中可能不会如此整齐地打包。现在我的问题是:
我可以创建一个下载 link 到我的对象的 JSON 表示吗?
<li ng-repeat="phone in phones">
<a
href="data:text/json;charset=utf-8,{{encodeURIComponent(JSON.stringify(phone))}}"
download="{{phone._id}}.json">
JSON
</a>
</li>
我基本上想用格式化函数encodeURIComponent(JSON.stringify(phone))
访问当前对象phone
。
有没有办法巧妙地做到这一点?
I basically want to access the current object phone with the formatting function encodeURIComponent(JSON.stringify(phone)).
您只需向您的控制器添加一个方法:working example (collections)
$scope.encodeJson = function(phone) {
return encodeURIComponent(JSON.stringify(phone));
}
<a href="data:text/json;charset=utf-8,{{encodeJson(data)}}" download="{{filename}}">
您可能还需要sanitize the URL
集合基本相同:
<p ng-repeat="item in collection">
<a href="data:text/json;charset=utf-8,{{encodeJson(item)}}" download="{{item.id}}.json">
</p>
此外,您可能需要通过在 ng-repeat 中使用 "track by item.id" 语法删除由 ng-repeat 添加的 $$HashKey。
另一种方法 可以将这些函数添加到 $scope
本身并在 ng-* 属性中使用它们。
$scope.encodeURIComponent = encodeURIComponent;
$scope.JSON = JSON;
感谢rnrneverdies的建议,我在配置中添加了以下内容
phonecatApp.config(['$compileProvider', function ($compileProvider) {
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|file|data|blob):/);
}]);
并将这些函数添加到控制器中的 $scope
$scope.stripClone = function(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr) && attr != '$$hashKey') {
var obj_attr = obj[attr];
if (typeof obj_attr == "object"){
copy[attr] = this.stripClone(obj_attr);
} else if (typeof obj_attr == "array"){
copy[attr] =[];
for(var i =0; i<obj_attr.length; i++){
copy[attr].push(this.stripClone(obj_attr));
}
}else{
copy[attr] = obj_attr;
}
}
}
return copy;
};
$scope.myEncodeJson = function(obj){
return JSON.stringify(this.stripClone(obj));
};
我现在可以在模板中调用这些函数来实现我想要的 json 魔法:
<a ng-href="data:text/json;charset=utf-8,{{myEncodeJson(phone)}}
感谢您的帮助