0

我有一个调用自定义服务的 Angular (V 1.1.5) 指令。该指令很好地调用了服务,但服务没有发出请求。下面的代码:

Services.factory("storeLocator",["$resource",function($resource){
    var serviceResource=$resource("http://my.domain.com/locator",{
        country:"US",
        searchradius: "50|150",
        digits:"3"
    },{
        byCoords: {
            method:"GET",
            params: {
                longitude:"",
                latitude:""
            },
            cache:true
        },
        byZip: {
            method:"GET",
            params:{
                zip:""
            },
            cache:true
        }

    });

    return {

        byCoords:function(lon,lat,onSuccess) {


        serviceResource.byCoords({latitude:lat,longitude:lon},function(data){
                if( typeof(onSuccess)==="function"){
                    onSuccess(data);
                }
            });

        },

        byZipCode:function(zipcode,onSuccess) {
            serviceResource.byZip({address:zipcode},function(data){
                if( typeof(onSuccess)==="function") {
                    onSuccess(data);
                }
            });
        }
    };

}]);

        Directives.directive("myLocator",["storeLocator",function(storeLocator){

return{
    restrict:"AC",
    scope: {
        template:"@"
    },
    templateUrl: function(tElement,tAttrs) {

        /** Retrieve Template URL **/

    },

    controller: ["$scope",function($scope){
        var parseData=function(data){
            console.log(data);
        }

        var findStoresByGeolocation=function(position) {
            storeLocator.byCoords(position.coords.longitude,position.coords.latitude,parseData);    
        }


        if(navigator.geolocation){
            navigator.geolocation.getCurrentPosition(findStoresByGeolocation);
        }
    }],

    link:function(scope,element,attrs){



    }

}
   }]);

指令和服务都在单独的 JS 文件中,并被注入到我的模块中。

就像我说的那样,指令调用 storeLocator.byCoords 就好了,所有参数都被传递了。

我尝试从指令中的不同点调用服务(链接和编译函数)。

额外的怪异是页面加载,没有请求。单击链接以加载新页面,发出请求。该指令在站点上是全局的。

我已经为控制器创建了服务,但我没有遇到这个问题。

感谢您的建议。

4

1 回答 1

0

我认为这可能与您在 Angular“事件循环”之外运行的代码有关(因为它是从非 Angular 事件处理程序调用的)。

尝试这个:

var findStoresByGeolocation = function(position) {
  $scope.$apply(function() {
    storeLocator.byCoords(position.coords.longitude,position.coords.latitude,parseData);    
  });
};
于 2013-06-29T06:44:16.113 回答