2016-05-08 4 views
2

私はAngularJSとイオンの発展に非常に新しいは、適切かつ効率的にJSONデータを保存し、終了時にそれを復元する方法を疑問に思っやアプリを開いています、と思います。JSONをこのIonic Appに保存して復元する最も効率的な方法は?

私が作るしようとしているアプリは、簡単なto-doリストアプリです。私はtasksという名前のリストをJSON形式で持っています。このリストは、ユーザーが追加/削除することができます。私は彼らの予定リストを保存したい、今すぐ再開後にアプリケーションがリセットされるように。

私が作っているアプリのapp.jsがあり、保存したいJSONデータのtasksTaskServiceサービスの一番下にあります。

// Ionic Checklist App 
 
angular.module('checklist', ['ionic']) 
 

 
.run(function ($ionicPlatform) { 
 
    $ionicPlatform.ready(function() { 
 
     if (cordova.platformId === 'ios' && window.cordova && window.cordova.plugins.Keyboard) { 
 
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
 
      cordova.plugins.Keyboard.disableScroll(true); 
 
     } 
 
     if (window.StatusBar) { 
 
      StatusBar.styleDefault(); 
 
     } 
 
    }); 
 
}) 
 

 
.controller('TasksCtrl', function ($scope, $ionicModal, TaskService) { 
 
    $scope.tasks = TaskService.getTasks(); 
 

 
    $ionicModal.fromTemplateUrl('newTaskModal', 
 
     { 
 
      scope: $scope, 
 
      animation: 'slide-in-up' 
 
     }).then(function (modal) { 
 
      $scope.modal = modal; 
 
     }); 
 

 
    $scope.openNewTask = function() { 
 
     $scope.modal.show(); 
 
    } 
 

 
    $scope.closeNewTask = function() { 
 
     $scope.modal.hide(); 
 
    } 
 

 
    $scope.newTaskInput = { 
 
     taskName: '', 
 
     taskComments: '' 
 
    } 
 

 
    $scope.newTask = function() { 
 
     console.log($scope.newTaskInput.taskName); 
 
     TaskService.makeTask($scope.newTaskInput.taskName, $scope.newTaskInput.taskComments); 
 
     $scope.closeNewTask(); 
 
    } 
 

 
    $scope.deleteTask = function (task) { 
 
     console.log(TaskService.getTasks()); 
 
     TaskService.deleteTask(task); 
 
    } 
 

 
}) 
 

 
.controller('TaskDetailCtrl', function ($scope, $stateParams, TaskService) { 
 
    $scope.taskId = $stateParams.taskId; 
 
    $scope.task = TaskService.getTask($scope.taskId); 
 
}) 
 

 
.config(function ($stateProvider, $urlRouterProvider, $ionicConfigProvider) { 
 

 
    $ionicConfigProvider.navBar.alignTitle('center'); 
 

 
    $stateProvider 
 
     .state('tasks', { 
 
      url: '/', 
 
      templateUrl: 'tasks', 
 
      controller: 'TasksCtrl' 
 
     }) 
 
     .state('taskDetail', { 
 
      url: '/:taskId', 
 
      templateUrl: 'taskDetail', 
 
      controller: 'TaskDetailCtrl' 
 
     }); 
 

 
    $urlRouterProvider.otherwise("/"); 
 

 
}) 
 

 
.service('TaskService', function() { 
 
    return { 
 

 
     //Sample Tasks 
 
     /*tasks: [ 
 
     { 
 
      id: '1', 
 
      name: 'Milk', 
 
      comment: 'get it from the Frick Park Market' 
 
     }, 
 
     { 
 
      id: '2', 
 
      name: 'Eggs', 
 
      comment: 'get from chicken' 
 
     } 
 
     ],*/ 
 

 
     tasks: [], 
 
     makeTask: function(name, comment) { 
 
      var newId = this.tasks.length + 1; 
 
      this.tasks.unshift({ 
 
       id: newId, 
 
       name: name, 
 
       comment: comment 
 
      }); 
 
     }, 
 
     deleteTask: function (task) { 
 
      console.log(task); 
 
      console.log(this.tasks); 
 
      console.log(this.tasks.indexOf(task)); 
 
      this.tasks.splice(this.tasks.indexOf(task), 1); 
 
      for (i = 0; i < this.tasks.length; i++) { 
 
       this.tasks[i].id = i+1; 
 
      }; 
 
     }, 
 
     getTasks: function() { 
 
      return this.tasks; 
 
     }, 
 
     getTask: function (taskId) { 
 

 
      for (i = 0; i < this.tasks.length; i++) { 
 

 
       if (this.tasks[i].id == taskId) { 
 
        return this.tasks[i]; 
 
       } 
 

 
      } 
 

 
     } 
 
    } 
 
})

答えて

1

あなたは最善のことは、NPMでノードが-存続インストールこのhttps://github.com/simonlast/node-persist

ようなものを使用することでデータベースを使用したくない場合は、最も簡単なことPROBでしょう。ここで

はGitHubのからのサンプルです:

var storage = require('node-persist'); 

//you must first call storage.init or storage.initSync 
storage.initSync(); 

//then start using it 
storage.setItem('name','yourname'); 
console.log(storage.getItem('name')); 

var batman = { 
    first: 'Bruce', 
    last: 'Wayne', 
    alias: 'Batman' 
}; 

storage.setItem('batman',batman); 
console.log(storage.getItem('batman').alias); 

は、基本的にこれは、ファイルへの書き込みの代わりに、あなたは、クライアント側のJSスクリプトにノードは、持続必要がないだけで、ブラウザで

+0

どのように? – Nikush

+0

Nvm、cordovaにはこの機能が組み込まれています! – Nikush

+0

遅延のお詫び!私は正しい睡眠に追いつく必要があった。 通常のWebアプリケーションでは、ノードをインストールしてから、コマンドラインから 'npm install node-persist'を実行します。私はCardovaについて私が見ているかもしれないことを知らなかった:) –

関連する問題