這個問題場景是在使用ionic開發頁面的過程中發現,多個頁面對應的多個controller如何去調用公共方法,比如給ionic引入了toast插件,如何將這個插件的調用變成公共方法或者設置成工具類,因為在每個controller中直接注入這個toast插件顯然不是一個優秀的代碼之道,將來這個toast插件接口變化了咋整?
很顯然我們應該對這個插件的調用進行一層簡單包裝,可以創建一個service,然后在這個service里面包裝這個插件,最后把service注入到controller里面
service.js
angular.module('starter.services', ['ionic-toast']) .factory('utilService', function(ionicToast) { return { //toast plugin api doc: http://market.ionic.io/plugins/ionictoast toast:function(msg){ ionicToast.show(msg, 'top', false, 2500); }, showToast:function(msg){ ionicToast.show(msg, 'top', true, 2500); }, hideToast:function(){ ionicToast.hide(); } } })
controller.js
共享數據道理一樣,我們可以定義個dataService的對象來包含共享數據
.factory('dataService', function() { var itList = [ { id: 0 }, { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }, { id: 7 }, { id: 8 }, { id: 9 }, { id: 10 } ]; var service={ data:itList, }; return service; });
然后在controller里面注入
.controller('ComponentCtrl', function($scope, dataService) { ... $scope.items = dataService.data; ... })