Angularjs $资源从指令调用而不是请求

时间:2013-06-28 21:57:19

标签: javascript angularjs

我有一个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就好了,并传递了所有参数。

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

在页面加载时有一点奇怪,没有请求。单击链接以加载新页面,发出请求。该指令在网站上是全球性的。

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

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

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

试试这个:

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