2013-08-22 8 views
19

Mam problem z usługą kątową JS.Skorzystaj z usługi w usłudze View Angular JS

mam prostą obsługę:

angular.module('mainApp.services', []).factory('AuthService', 
function ($http) { 
    //var currentUser = null; 
    //var authorized = false; 

    //AutoLogin for testing 
    var currentUser={email: "[email protected]", id: "15"}; 
    var authorized=true; 

    // initial state says we haven't logged in or out yet... 
    // this tells us we are in public browsing 
    var initialState = false; 

    return { 
     initialState:function() { 
      return initialState; 
     }, 
     login:function (userData) { 
      //Call API Login 
      currentUser = userData; 
      authorized = true; 
      initialState = false; 
     }, 
     logout:function() { 
      currentUser = null; 
      authorized = false; 
     }, 
     isLoggedIn:function() { 
      return authorized; 
     }, 
     currentUser:function() { 
      return currentUser; 
     }, 
     authorized:function() { 
      return authorized; 
     } 
    }; 
}); 

następnie Mam proste kontroler

.controller('NavbarTopCtrl', ['$scope','$modal','AuthService',function($scope,$modal,authService) { 
    $scope.authService=authService; //IS good practice? 
    console.log($scope); 
}]) 

Nie mogę korzystać z moich usług w polu widzenia. Zrobiłem prosty trik i działa dobrze.

$scope.authService=authService 

Ale jak zadzwonić Serwisu bez tego moim zdaniem (plik HTML)?

Odpowiedz

16

Korzystanie z usług wewnątrz widoków jest ogólnie złą praktyką. Widok powinien zawierać tylko logikę prezentacji. W twoim przykładzie zamiast przekazywania całej usługi do widoku możesz spróbować przekazać tylko obiekt użytkownika. Na przykład $scope.currentUser = authService.currentUser().

+0

Sprawdź tutaj, aby zalogować się do serwisu. To działa dobrze. https://github.com/robertjchristian/angular-enterprise-seed –

+7

Co zrobić, gdy masz zestaw funkcji, które chcesz wywoływać z widoku za pomocą polecenia 'ng-click'? Jest dość żmudne zawijanie każdej funkcji, którą chcesz eksponować na widok wewnątrz funkcji wywołującej wewnątrz kontrolera. Myśli? –

+12

myApp.configure (funkcja ($ rootScope) {$ rootScope.foo = function() {console.log ("zadzwoń do mnie z dowolnego miejsca;)")}); – luacassus