Ionic - problem - factory

0

Witam,

chciałbym, aby część kodu w app.js była wykonywana z dwóch miejsc. Stąd pomyślałem o przeniesieniu jej do osobnego elementu typu factory.

var starter = angular.module('starter', ['ionic', 'ngRoute', 'ngAnimate'])

.config(function($routeProvider) {
    $routeProvider
//jakiś kod jakiś kod 

})
.run(function ($ionicPlatform, $rootScope, $http, theService) {

    $ionicPlatform.ready(function () {
    
   //jakiś kod jakiś kod     

        //  theService.proceed();
        // tutaj ma być wywoływany kod właściwy.
    });
});


starter.factory('theService', function() {

    theService.proceed= function() {
        // tutaj bedzie kod właściwy 
    };

    return {
    };
});

Kiedy kod właściwy był umieszczony w ciele usługi typu factory theService (a jeszcze nie było procedury proceed), wszystko działało, jednak kod był wykonywany bez względu na to, czy została wywołana komenda z elementu .run. Tymczasem chciałem, aby kod właściwy był wykonywany tylko na komendę.

Dlatego próbowałem dopisać procedurę wewnątrz elementu factory theService, żeby wywoływać kod wyłącznie na zawołanie. Po dopisaniu tej procedury całość przestała się wykonywać, a w konsoli jest wyświetlany błąd: theService is not defined.

Co zaskakujące błąd nie pojawia się, kiedy zlikwiduję w ciele elementu factory procedurę .proceed.

Co źle robię?

1

W theService powinieneś tworzyć funkcje prywatne i je zwracać w stylu module pattern, np.

 starter.factory('theService', function() {

    function proceed() {
        // tutaj bedzie kod właściwy 
    };

    return {
         proceed: proceed
    };
});

Lub stworzyć sobie obiekt (niech będzie z nazwą theService) i go zwracać

 starter.factory('theService', function() {
    var theService = {};

    theService.proceed = function() {
        // tutaj bedzie kod właściwy 
    };

    return theService;
});

Ty nie stworzyłeś obiektu (theService), i dodałeś do tego niestworzonego obiektu pole proceed, co powoduje problem. Na końcu nie zwróciłeś nic z factory, co jakby troche nie zadziała :P

0

Tak, pierwszy sposób działa:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1