我有一个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就好了,并传递了所有参数。
我试过从指令中的不同点(链接和编译函数)调用服务。
在页面加载时有一点奇怪,没有请求。单击链接以加载新页面,发出请求。该指令在网站上是全球性的。
我为控制器创建了服务,我没有遇到过这个问题。
感谢您的建议。
答案 0 :(得分:0)
我认为这可能与您在Angular'事件循环'之外运行的代码有关(因为它是从非Angular事件处理程序调用的)。
试试这个:
var findStoresByGeolocation = function(position) {
$scope.$apply(function() {
storeLocator.byCoords(position.coords.longitude,position.coords.latitude,parseData);
});
};