设置从服务中选择的angularjs的初始值

时间:2015-03-09 23:32:23

标签: javascript angularjs promise angularjs-service

我有两个国家和州的选择标签输入。它们目前使用角度控制器中变量设置的初始字符串值。我想从具有W3C地理编码和google-map address_components的服务中获取这2个变量,并在页面加载时使用它们设置HTML模板。

我有很多问题,但首先我想要一个服务中的硬编码对象来更新控制器,而控制器又会更新HTML。我花了很多时间进行数据传输,但我无法获得。然后,我将更改硬编码对象,以便从谷歌地图中提取位置数据,这是我之前完成的。

HTML是:

<select id="country"data-ngmodel="cntrl.input.countrySelected"                  
    data-ng-options="country.code as country.text group by country.continent for country in cntrl.input.countries" >
</select> //cntrl.input.countries is set from a factory via the controller
<select id="state" data-ng-model="cntrl.input.stateSelected"                            
    data-ng-options="state.code as (state.code + ' - ' + state.text) for state in cntrl.input.state" >
</select> //cntrl.input.state is set from a factory via the controller

我使用控制器作为,相关的控制器代码是:

//cntrl.input.countrySelected = "US"; //hard coded works
//cntrl.input.stateSelected = "NY"; //hard coded works
//Edited, though still not working. Now just
cntrl.input.countrySelected = getUserGeolocateService.getUserLocation();
//cntrl.input.countrySelected = function initialCountry() {
//getUserGeolocateService.getUserLocation() //getUserLocation from getUserGeolocateService in getUserGeolocate.service.js
//.then( function( locationName4 ) {
    //return locationName4[country]; //object containing country and state
//});       
//}

我无法正常工作,所以我没有写任何东西来设置初始状态变量。它与工作国家指令的格式相同。

我尝试将服务代码设置为另一种方法/功能,以提供不同的位置数据。我对服务和承诺都很陌生。角度服务的相关代码是:

(function() { "use strict";
angular.module( "residenceApp" ).service( "getUserGeolocateService", function( $http, $q, uiGmapGoogleMapApi ) {
    this.getUserLocation = function(){
        var countryCode, stateCode, county, location4;
        var deferred = $q.defer();
        location4 = {};
        location4 = { "country": "US", "state": "NY"};
        deferred.resolve( location4 );
        console.log("country & state:" + locationName4); //does not fire
        return deferred.promise;
    };
});

此代码激活选择标记 - 单击向下箭头可打开一个可以选择的下拉列表。初始选择标记为空,countrySelected未设置为任何内容。如果服务和控制器功能正确,则硬编码对象locationName4应将一个选择设置为美国,另一个设置为纽约。 ng-options代码采用国家/地区代码并使用它来显示国家/地区名称的文本。

1 个答案:

答案 0 :(得分:-1)

好的,理论上说它可以在你可以在工厂里做的服务中做任何事情。但对我来说,当一个服务返回{&#34; $$ state&#34;:{&#34; status&#34;:1,&#34; value&#34;:{&# 34;国家&#34;:&#34;美国&#34;,&#34;州&#34;:&#34; NY&#34;}}},15个人看这个没有工作回复。我将模块更改为工厂,它返回一个普通的JS对象。工厂代码是:

function getUserGeolocateFactory(){
var location4;
return { getCountryState: function() {
    location4 = { "country": "US", "state": "NY"}; //TEST: object
    return location4;       
    }
  }
}

控制器代码为:

cntrl.input.countrySelected = initialCountry();
function initialCountry(){
    var name4=getUserGeolocateFactory.getCountryState();
    return name4.country;
};

快速而直接。 select标签获得初始化值。完成。