我目前正在将我的离子v1应用程序更新为离子v2,但我在基于承诺的服务方面遇到了麻烦.
离子v1
home.controller.js
angular.module('myApp.home',['myApp.services.camera',]) .controller('HomeCtrl',function($scope,CameraService) { $scope.getPicture = function() { var onSuccess = function(result) { // Some code }; var onError = function(err) { // Some code }; CameraService.getPicture().then(onSuccess,onError); }; });
camera.service.js
angular.module('myApp.services.camera',[]) .service('CameraService',function($q,$ionicPlatform,$cordovaCamera) { return { getPicture : function() { var deferred = $q.defer(); var onSuccess = function(result) { deferred.resolve(result); }; var onError = function(err) { deferred.reject(err); }; // my options here $ionicPlatform.ready(function() { $cordovaCamera.getPicture(options).then(onSuccess,onError); }); return deferred.promise; } }; });
这很好用.
现在用v2.
离子v2
取photos.ts
import {Page,NavController} from 'ionic-angular'; import {CameraService} from '../../services/camera.service'; @Page({ templateUrl: 'build/pages/take-photos/take-photos.html',providers: [CameraService] }) export class TakePhotosPage { constructor(private cameraService: CameraService) {} getPicture () { this.cameraService.getPicture().then((result) => { console.log(result); // Did not called // Some code },(err) => { // Some code }); } }
camera.service.ts
import {Injectable} from 'angular2/core'; import {Platform} from 'ionic-angular'; @Injectable() export class CameraService { constructor (private platform: Platform) {} getPicture () : any { // my options here this.platform.ready().then(() => { navigator.camera.getPicture((result) => { console.log(result); // Called return Promise.resolve(result); },(err) => { return Promise.reject(err); },options); }); } }
使用v1,正确返回promise.
随着v2我得到一个错误:
TypeError:无法读取take-photos.ts中未定义的属性’then’为此行this.cameraService.getPicture().然后
我不明白为什么我跟着angular tutorial about services and promises
如果有人有想法,那将是非常有帮助的.