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 に答える