angular中通過service factory 等服務來對不同的控制器進行數據交互 ,ionic 也一樣...
var app = angular.module('ionicApp', ['ionic']) app.service('TodosService', function($q) {
return {
todos: [
{
id: '1',
name: 'Pick up apples',
done: false
},
{
id: '2',
name: 'Mow the lawn',
done: true
}
],
getTodos: function() {
return this.todos
},
getTodo: function(todoId) {
var dfd = $q.defer()
this.todos.forEach(function(todo) {
if (todo.id === todoId) dfd.resolve(todo)
}) return dfd.promise
} }
})
在不用的view中我們可以通過 route 中的resolve 來加載相關的服務;
app.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/todos') $stateProvider
.state('todos', {
url: '/todos',
controller: 'TodosCtrl',
templateUrl: 'todos.html' ,
resolve: {
todos: function(TodosService) {
return TodosService.getTodos()
}
}
})
.state('todo', {
url: '/todos/:todoId',
controller: 'TodoCtrl',
templateUrl: 'todo.html' ,
resolve: {
todo: function($stateParams, TodosService) {
return TodosService.getTodo($stateParams.todoId)
}
}
})
})
在控制器中注入 在route中加載的服務返回的函數 如todo todos
app.controller('TodosCtrl', function($scope,todos) {
$scope.todos = todos;
}) app.controller('TodoCtrl', function($scope,todo) { $scope.todo = todo })