1

得到返回值我在AngularJS非常新,我有以下問題:AngularJS:如何從工廠

查看:

<div> 
    <form role="form" name="loginForm" class="form-horizontal login-form"> 
     <div class="form-group"> 
      <p class="login-form-msg">Welcome : {{user.username}}</p> 
      <label for="inputUserName" class="col-sm-2 control-label login-form-label">Base</label> 
      <div class="col-sm-10"> 
       <input type="text" placeholder="Enter base" class="form-control" required ng-model="user.code"> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label for="inputUserName" class="col-sm-2 control-label login-form-label">Username</label> 
      <div class="col-sm-10"> 
       <input type="text" placeholder="Enter name" class="form-control" required ng-model="user.username"> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label for="inputPassword" class="col-sm-2 control-label login-form-label">Password</label> 
      <div class="col-sm-10"> 
       <input type="password" placeholder="Password" id="inputPassword" class="form-control" required ng-model="user.password"> 
      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-sm-offset-2 col-sm-10 login-form-button"> 
       <button class="btn btn-default" type="submit" ng-disabled="loginForm.$invalid" ng-click="login(user)">Sign in</button> 
      </div> 
      <p class="login-form-msg">{{msgtxt}}</p> 
     </div> 
    </form> 
</div> 

主要JS:

var myApp = angular.module('myApp', ['ngRoute']); 

myApp.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider.when('/login', { 
     templateUrl: 'partials/login.html', 
     controller:'loginCtrl' 
    }); 
    $routeProvider.when('/welcome', { 
     templateUrl: 'partials/welcome.html', 
     controller:'loginCtrl' 
    }); 
    $routeProvider.otherwise({ redirectTo: '/login' }); 
}]); 

我有以下工廠:

myApp.factory('getURLService', function ($http, config) { 
    return { 
     getURL: function (user,scope) { 
      $http.get(config.backend + "/Device/GetURLbyCode", { 
       params: { code: user.code } 
      }) 
      .success(function (data) { 
       var url = ''; 
       if (data.status == 'succ') { 
        url = data.Result; 
       } 
       else { 
        scope.msgtxt = data.msg; 
       } 
       return url; 
      }); 
     } 
    } 
}); 

我需要從這個工廠在其他工廠使用返回值。

舉例來說,在我的登錄工廠:

myApp.factory('loginService', function ($http, $location, config) { 
    return { 
     login: function (user,url,scope) { 

      $http.get(url + "/Device/Register", { 
       params: { userName: user.username, password: user.password } 
      }) 
      .success(function (data) { 
       if (data.status == 'succ') { 
        $location.path('/welcome'); 
       } 
       else { 
        scope.msgtxt = data.msg; 
       } 
      }); 
     } 
    } 
}); 

這是我的控制器:

myApp.controller('loginCtrl', function ($scope, getURLService, loginService) { 
    $scope.msgtxt = ''; 

    $scope.login = function (user) { 
     loginService.login(user,url,$scope); //call login service 
    } 
}); 

什麼我需要在我的控制器做實際上會返回URL,然後將其發送到登錄服務或任何其他服務(甚至控制器)在未來?

預先感謝您的時間和建議。

回答

2

對於來自你應該返回的$http.get已經返回其承諾目標函數返回的數據。

,我想指出的其他事情是,通過$範圍服務違抗單的規則,因爲你正在創建一個服務,這是依賴於控制範圍。服務應該只接受參數並通過處理返回結果,沒有別的。

代碼

return { 
    getURL: function (user,scope) { 
     return $http.get(config.backend + "/Device/GetURLbyCode", { 
      params: { code: user.code } 
     }) 
     .then(function (res) { 
      var data = res.data; 
      var url = ''; 
      if (data.status == 'succ') { 
       url = data.Result; 
      } 
      else { 
       scope.msgtxt = data.msg; 
      } 
      return url; 
     }); 
    } 
} 

login服務

myApp.factory('loginService', function ($http, $location, config) { 
    return { 
     login: function (user,url) { 

      return $http.get(url + "/Device/Register", { 
       params: { userName: user.username, password: user.password } 
      }) 
      .then(function (response) { 
       var data = response.data; 
       if (data.status == 'succ') { 
        $location.path('/welcome'); 
        return; 
       } 
       return data.msg; 
      }); 
     } 
    } 
}); 

控制器

getURLService.getURL(user).then(function(url){ 
    //assuming you already having value of user available here 
    loginService.login(user,url).then(function(message){ //call login service 
     if(message) 
      $scope.msgtxt = message; 
    }); 
}); 
+0

首先感謝你對你的快速反應。我得到一個代碼未定義的錯誤。我如何將它傳遞給getURL服務?對不起,我的新手問題。 – Wolf

+0

@wolf基本上你需要傳遞給getUrl方法 –

+0

我想,用戶對象,但後來我得到用戶是不確定的。 – Wolf