Javascript 同时使用http请求、承诺、ng选项和工厂或服务

Javascript 同时使用http请求、承诺、ng选项和工厂或服务,javascript,angularjs,Javascript,Angularjs,我试图从我们的数据库中检索一个选项列表,并尝试使用angular来实现。我以前从未使用过服务,但我知道如果我要在页面上的其他控制器中使用来自对象的数据,这将是实现我想要的功能的最佳方式 我遵循了一些教程,创建了一个工厂,它发出http请求并返回数据。我试过几种方法,但由于某种原因,什么也没有发生。就好像它从来没有运行过工厂功能,我不知道为什么 工厂: resortModule= angular.module('resortApp',[]); resortModule.factory('loca

我试图从我们的数据库中检索一个选项列表,并尝试使用angular来实现。我以前从未使用过服务,但我知道如果我要在页面上的其他控制器中使用来自对象的数据,这将是实现我想要的功能的最佳方式

我遵循了一些教程,创建了一个工厂,它发出http请求并返回数据。我试过几种方法,但由于某种原因,什么也没有发生。就好像它从来没有运行过工厂功能,我不知道为什么

工厂:

resortModule= angular.module('resortApp',[]); 
resortModule.factory('locaService',['$http', function ($http){
    var locaService= {};
    locaService.locations = {};
    var resorts = {};

    locaService.getLocations=
        function() {
            $http.get('/url/url/dest/').success(function (data) {
                locaService.locations = data;   
            });
            return locaService.locations;
        };
    return locaService;

    //This is a function I would like to run in addition to the first one so multiple variables would be stored and accessible 
        /*getResorts:
            function(destination) {
                $http.get('/url/url/dest/' + destination.id).success(function (data) {
                    resorts = data;
                });
                return resorts;
        }*/
}]);


resortModule.controller('queryController',['$scope', 'locaService',   function($scope, locaService) {
    $scope.checkConditional= function (){
            if($("#location").val() == ""){
            $("#location").css('border','2px solid #EC7C22');
            }
    };
    $scope.selectCheck= function (){
        $("#location").css('border','2px solid #ffffff');
        $(".conditional-check").hide();
    };
    $scope.resort;
    $scope.locations= locaService.getLocations();
}]);

我只希望返回数据,然后将其分配给$scope.locations,以便用于视图中的ng选项。然后,我希望我的另一个函数在单击时运行,以便下一个字段由变量resort填充。我该怎么做?任何帮助都会很好!谢谢

$http服务返回一个承诺,您的函数应该返回该承诺。基本上,getLocations函数应该如下所示

locaService.getLocations=
    function() {
        return $http.get('/url/url/dest/');
    };
然后在控制器中,您应该使用以下承诺检索选项:

locaService.getLocations()
    .then(
        function(locations) // $http returned a successful result
           {$scope.locations = locations;}
       ,function(err){console.log(err)} // incase $http created an error, log the returned error);
在控制器中使用jquery或在控制器中操作dom元素不是一个好的实践,您可以使用ng style或ng class在视图中直接应用样式和css类。 下面是一个示例,说明所有这些都应该如何连接起来:

resortModule= angular.module('resortApp',[]); 
resortModule.factory('locaService',['$http', function ($http){
    var locaService= {
      locations: {}
    };
    var resorts = {};

    locaService.getLocations= function() {
        return $http.get('/url/url/dest/');
    };
    return locaService;

    //This is a function I would like to run in addition to the first one so multiple variables would be stored and accessible 
        /*getResorts:
            function(destination) {
                $http.get('/url/url/dest/' + destination.id).success(function (data) {
                    resorts = data;
                });
                return resorts;
        }*/
}]);


resortModule.controller('queryController',['$scope', 'locaService',   function($scope, locaService) {
    /* Apply these styles in html using ng-style
    $scope.checkConditional= function (){
            if($("#location").val() == ""){
            $("#location").css('border','2px solid #EC7C22');
            }
    };
    $scope.selectCheck= function (){
        $("#location").css('border','2px solid #ffffff');
        $(".conditional-check").hide();
    };
    */
    $scope.resort;
     locaService.getLocations()
    .then(
        function(locations) // $http returned a successful result
           {$scope.locations = locations;}
       ,function(err){console.log(err)} // incase $http created an error, log the returned error);
}]);

所以它看起来像:var restoremodule=angular.module('restorapp',[]);restormodule.factory('locaService',['$http',function($http){locaService.getLocations=function(){return$http.get('/url/destinations');};}]);RestorModule.controller('queryController',['$scope','locaService',function($scope,locaService){locaService.getLocations()。然后(function(locations)/$http返回了一个成功的结果{$scope.locations=locations;},function(err){console.log(err)}//如果$http创建了一个错误,记录返回的错误); );}]); ?我在上面得到了一个“locaService is not defined”错误^It在我看来是正确的,但是(sry关于格式)你应该把var locaService={};在函数开始时,它没有在您的注释中定义。好的,我尝试在工厂中的getLocations函数之前添加它,但现在它给了我一个injector:undef错误:。我试着把它放在一个返回函数中,因为它似乎在请求什么,但它不喜欢它。耶!非常感谢。它正在返回一些东西。谢谢你的ng风格的建议。我一定会调查的。