2015-07-18 20 views
8

Ho un servizio in questo modo:il servizio angularjs non è una funzione

app.service('Utilities', function() { 
    this.sum = function(items, prop) { 
    var count, total; 
    total = 0; 
    count = 0; 
    if (items === null) { 
     total = 0; 
    } 
    while (count < items.length) { 
     total += items[count][prop] * 1 || 0; 
     count++; 
    } 
    return total; 
    }; 
}); 

e un controller in questo modo:

app.controller('writeCtrl', function($scope, Utilities, students) { 
    $scope.students = students; 
    $scope.total_age = Utilities.sum($scope.students, 'age'); 
}); 

E io continuo a ricevere l'errore

Typerror: Utilities.sum is not a function

Quale è confuso perché circa una dozzina di altre funzioni sotto il servizio di utilità sta funzionando bene. Qual è la causa del problema e come posso far funzionare la funzione?

Modifica Actual versione CoffeeScript

app.service 'Utilities', -> 
    @sum = (items, prop) -> 
    total = 0 
    count = 0 
    if items == null 
     total = 0 
    while count < items.length 
     total += (items[count][prop]*1 || 0) 
     count++ 
    return total 

app.controller 'writeCtrl', ($scope, Utilities, students) -> 
    $scope.students = students 
    $scope.total_age = Utilities.sum($scope.students, 'age') 

Soluzione:

funzioni CoffeeScript bisogno di un ritorno:

App.service 'Utilities', -> 
    ..... 
    return 
+1

È questo il rientro corretto del tuo codice? CoffeeScript è uno spazio bianco significativo e sembrerebbe che tu abbia un errore di indentazione sulla riga 3 –

+0

@DanPantry Ciao Dan, il rientro deve essere incasinato quando lo ho incollato su StackOverflow, ma sì il rientro nel mio codice attuale è corretto. –

risposta

7

Servizio mai restituisce un oggetto, in fondo si lega un metodo o variabile al suo contesto; nient'altro che this & quindi restituisce un nuovo object che contiene tutte le cose che sono state associate a this.

Codice

app.service('Utilities', function() { 
    this.sum = function(items, prop) { 
    var count, total; 
    total = 0; 
    count = 0; 
    if (items === null) { 
     total = 0; 
    } 
    while (count < items.length) { 
     total += items[count][prop] * 1 || 0; 
     count++; 
    } 
    return total; 
    }; 

    // 
    // ..other utility method should lies here.. 
    //..do your stuff 
}); 

Aggiornamento

Si dovrebbe cambiare il vostro servizio di script di caffè da

app.service 'Utilities' -> 

a

app.service 'Utilities'() -> 
+0

scusate, è un refuso dall'app js2coffee. Sto usando @sum = (oggetti, oggetti di scena) -> con coffeescript. –

+0

@ Ryan.lay incollare il codice effettivo anziché una versione transpiled. –

+0

@ Ryan.lay puoi aggiornare il tuo codice allora ... quello che hai nel tuo codice –