angular公共页面提供公共服务(例如获取小区)

需求:在开发中有个需求,需要获取用户的所在小区,用户需要跳转到小区页面,选择小区之后再回退到选择小区的页面(有多个页面都需要选择小区)。

思路:页面需要跳转到选择小区页面,既然是单独的页面,就有单独的controller和service,因此,最好的方式是让“选择小区”作为一个“公共服务”,适用于所有的页面

小区的控制器 jiazhengXiaoquController.js

//选择地区
angular.module("jiazhengApp").controller("jiazhengXiaoquController", ["$scope", "$state",'xiaoquService', function ($scope, $state, xiaoquService) {

    xiaoquService.getLocation($scope);

    //回退到上一个页面
    $scope.back = function(){
        xiaoquService.goBack();
    };

    //选择小区触发的事件
    $scope.selectXiaoqu = function(myevent,xid){
        var currentObj = $(myevent.target).closest("li");
        var xiaoquName = currentObj.find("h2").html();
        var xiaoquJson = {};
        xiaoquJson[xid] = xiaoquName;
        repairDeviceDataShareServer.xiquLocation = xiaoquJson;
        this.back();
    };


    //显示下拉列表
    $scope.showDistrictList = function(){
        $(".district_class").toggle();
    };

    //选中下拉内容
    $scope.itemSelected = function(myevent,nid){
        var currentObj = $(myevent.target);
        $("#btnValue").html(currentObj.html());
        var url;
        if(nid != "" && nid != undefined && nid != null){
            url = "/index.php/Wap/Community/AjaxIndex.html?area="+nid+"&city=197";
        }
        xiaoquService.getLocation($scope,url);
    };

}]);

小区服务xiaoquService

/**
 * 选择小区服务
 */
angular.module("jiazhengApp")
    //共享数据的服务
    .factory("xiaoquService",function($http,$ionicPopup,$state){
        return {
            //存储用户选中的位置
            xiquLocation:{},
            //浏览器是否支持定位
            isSupportLocation : function(){
                if(navigator.geolocation){
                    return true;
                }else{
                    //浏览器不支持geolocation
                    alert('浏览器不支持地理位置获取!');
                    return false;
                }
            },
            getLocation : function(__scope__,myurl){
                function onSuccess(position){
                    //返回用户位置
                    //经度
                    var longitude =position.coords.longitude;
                    //纬度
                    var latitude = position.coords.latitude;
                    //var map = new BMap.Map("container");
                    //map.centerAndZoom(new BMap.Point(longitude, latitude), 11);
                    // 创建地理编码实例
                    var myGeo = new BMap.Geocoder();
                    // 根据坐标得到地址描述
                    myGeo.getLocation(new BMap.Point(longitude, latitude), function(result){
                        if (result){
                            var address = result.addressComponents.city+result.addressComponents.district;
                            //异步加载数据
                            var url = "/index.php/Wap/Community/AjaxIndex.html";
                            if(myurl != undefined && myurl != "" && myurl != null){
                                url = myurl;
                            }
                            $.ajax({
                                // type: 'GET',
                                url: url ,
                                data: {city:result.addressComponents.city,district:result.addressComponents.district} ,
                                // dataType: 'json',
                                success: function(data){
                                    if(data.status == 1){
                                        __scope__.$apply(function(){
                                            __scope__.lists = data.data.list;
                                        });

                                    }
                                }
                            });
                        }
                    });
                }

                function onError(){

                    var url = "/index.php/Wap/Community/AjaxGetXq.html";
                    $.ajax({
                        url: url ,
                        // dataType: 'json',
                        data: {city:197,area:""} ,
                        success: function(data){
                            if(data.status == 1){
                                __scope__.$apply(function(){
                                    __scope__.lists = data.data.list;
                                });

                            }
                        }
                    });
                }


                //检查浏览器是否支持定位
                if(this.isSupportLocation()){
                    var options={
                        enableHighAccuracy:true,
                        maximumAge:1000
                    };
                    navigator.geolocation.getCurrentPosition(onSuccess,onError,options);
                }
            },
            //记录上一个页面的路径
            backUrl:'',
            //回退到上一个页面
            goBack:function(){
                $state.go(this.backUrl);
            }
        };
    });

备注: 

1、xiaoquService 有两个值xiquLocation(存储小区的ID号和名称) 和 backUrl(回退到上一个页面的URL),这两个值可以提供给任意引入xiaoquService的controller使用,是一个静态属性

2、goBack方法实际上是根据backUrl回退页面

引入小区服务的控制器

angular.module("jiazhengApp").controller("khbjIndexController", ["$scope", "$state", '$ionicPopup',
'khbjIndexService','dateService','xiaoquService',
 function ($scope, $state, $ionicPopup,khbjIndexService,dateService,xiaoquService) {

	//获取小区的位置
	var xiaoquKey=0;
	for(var key in xiaoquService.xiquLocation){
		xiaoquKey = key;
		khbjIndexService.formData["xiaoqu"] = xiaoquService.xiquLocation[key];
	}
	
}]);

进入小区页面的入口HTML页面

<ion-header-bar class="bg_fdd000" align-title="center">
    <button class="button button-clear " ng-click="goTo('jiazhengIndex')">
    <span class="icon ion-ios-arrow-left color_e5005a">
    </span>
    </button>
    <h1 class="title color_e5005a">
        开荒保洁
    </h1>
</ion-header-bar>


<ion-content class="bg_f0f0f0">
    <div class="bg_ff">
        <ul class="list">
            <li class="item" ng-click="goTo('khbjServiceIntroduce')">
                <div class="float_left color_e5005a">
                    服务须知:
                </div>
                <div class="float_right">
                  <span class="icon ion-chevron-right color_99" style="font-size: 14px;">
                  </span>
                </div>
                <div class="clear_both">
                </div>
            </li>
            <li class="item item-input">
        <span class="input-label">
          房屋面积:
        </span>
                <input type="text" class="text-right" placeholder="≥30平方米" ng-model="formData.houseArea">
            </li>
            <li class="item" ng-click="showDateDialog()">
                <div class="float_left">
                    服务日期:
                </div>
                <div class="float_right">
          <span class="" ng-bind="formData.orderDate">
          </span>
          <span class="color_e5005a">
            修改
          </span>
          <span class="icon ion-chevron-right color_99" style="font-size: 14px;">
          </span>
                </div>
                <div class="clear_both">
                </div>
            </li>
            <li class="item" ng-click="goTo('jiazhengXiaoqu')">
                <div class="float_left">
                    选择小区:
                </div>
                <div class="float_right">
          <span class="" ng-bind="formData.xiaoqu">
          </span>
          <span class="color_e5005a">
            修改
          </span>
          <span class="icon ion-chevron-right color_99" style="font-size: 14px;">
          </span>
                </div>
                <div class="clear_both">
                </div>
            </li>
            <li class="item item-input">
        <span class="input-label">
          服务要求
        </span>
                <input type="text" class="text-right" placeholder="请输入服务要求" ng-model="formData.request">
            </li>
        </ul>
    </div>
    <div class="padding_left_15 padding_right_15 margin_top_10">
        <div class="">
      <span class="font_18 icon ion-ios-checkmark">
      </span>
      <span class="">
        我已认真阅读并同意
      </span>
      <span class="color_e5005a" ng-click="goTo('jiazhengProtocol')">
        《社区惠开荒保洁协议》
      </span>
        </div>
    </div>
    <div id="bottom_div_show">
    </div>
</ion-content>
<div class="footer_fixed bg_ff all_width padding_top_5 padding_bottom_5 text-center">
    <button ng-click="startOrder()" class="button btn_sqh_yellow margin_center border_radius35 clear_border"
            style="padding:0 30px;">
        立即预约
    </button>
</div>

备注:

goTo()方法是绑定到$rootScope中的,相当于是一个全局方法,代码如下:

angular.module("jiazhengApp").run(function($rootScope,$state,xiaoquService){
	//定义一个全局函数,跳转到指定的页面
	$rootScope.goTo = function(urlState){
		//如果跳转到页面是选择小区,则记录当前页面,方便回退
		if(urlState == 'jiazhengXiaoqu'){
			var stateName = $state.current.name;
			xiaoquService.backUrl = stateName;
		}
		$state.go(urlState);
	};

});

猜你喜欢

转载自hbiao68.iteye.com/blog/2296542