簡體   English   中英

將對象保存到angularjs中的JSON文件中?

[英]Save object to JSON file in angularjs?

我是angularjs的新手,正在嘗試創建一個單頁應用程序。 我有一個非常簡單的代碼的家庭控制器。 本教程的內容

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.'}
  ];
});

但是在生產中,數據可能沒有那么整齊地打包。 現在我的問題是:

我可以創建指向我的對象的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

有辦法整齊地做到這一點嗎?

我基本上想使用格式化函數encodeURIComponent(JSON.stringify(phone))訪問當前的對象電話。

您只需在控制器中添加一個方法即可: 工作示例(集合)

$scope.encodeJson = function(phone) {
  return encodeURIComponent(JSON.stringify(phone));
}

<a href="data:text/json;charset=utf-8,{{encodeJson(data)}}" download="{{filename}}">

您可能還需要清理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)}}

謝謝你的幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM