2016-11-27 10 views
0

近くのATMを示すスクリプトを書いています。ページが開くと自動的にユーザーの場所が検出され、他の地域のATMをチェックする場合は、Googleが提供する他の場所を入力して選択することができます。Angularjs vsGoogleAutocompleteプラグインがコントローラの変更を検出できない

私はこのプラグインを使用しています:vsAutoComplete。それは正常に動作している、問題はありません。 私がしたいのは、ユーザーが新しい場所を選択した場合、スクリプトはその場所にあるATMをリストする必要があります。

私は$

$scope.$watch('address', function() { 
    console.log($scope.address); 
}, true); 

を見てみましたが、それはどちらか動作しませんでした。驚くべきことは、私がaddress変数にhtmlページでアクセスしようとすると動作するということです。

<span class="help-block"><b>Place id: </b>{{address.components.placeId}}</span> 

開発者がプラグインのデモ:Demo

任意の手掛かり?

PS:私はangularjsでそれほど良くありません。ただ、私の提案を与える

+0

誰かお答えください...私は固執しています。 –

答えて

1

..より良いアプローチは、この代わりに空の文字列を割り当てるので、残りはあなた件まで..です

$scope.address = { 
    name: null, 
    place: null, 
    components: { 
     placeId: null, 
     streetNumber: null, 
     street: null, 
     city: null, 
     state: null, 
     countryCode: null, 
     country: null, 
     postCode: null, 
     district: null, 
     location: { 
     lat: null, 
     long: null 
     } 
    } 
    }; 

    $scope.$watch('address.name', function (value) { 
    if(value === null || value === undefined) 
     return; 
    else 
     console.log($scope.address.name); 
    }); 

    //for deep watching 
    $scope.$watch('address', function (value) { 
    if(value === null || value === undefined) 
     return; 
    else 
     console.log($scope.address.name); 
    }, true); 
+0

あなたの助けに感謝@varsha、これは本当に素晴らしい提案です。 –

+1

上記の解決策を試しましたか?オブジェクトの変更を探しているので、$ watchCollectionを使用するもう1つのウォッチアプローチがあります。しかし、それはネストされたオブジェクトに対しては、浅い時計要素/フィールドのみを実行し、サブフィールドへの変更には反応しないので、機能しません。さまざまなパフォーマンス特性については、公式のドキュメントを参照してください。 [https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch](https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch) – Varsha

+1

はい、上記の解決策も試してみましたが、すでに$ watchCollectionも試していました。多くの調査の後、私はこの問題がプラグイン自体に存在することを発見したので、そのプラグインを削除して別のプラグインを使用し、最後に$ watchで作業しました。私は以下のソリューションを共有しています。 –

1

[OK]を、これは私が同じ目的を果たすいくつかの他のプラグインを使用し、私のため を働いたものですとなりますgoogle places autocomplete、その後行われ、いくつかの小さな変更

1)入力ボックス

<input type="search" g-places-autocomplete ng-model="autolocation.model"> 

ng-modelを追加2)コントローラ

$scope.autolocation = { 
    model: null 
} 

3)追加ウォッチ

$scope.$watch('autolocation.model', function(newValue, oldValue){ 
    console.log("New Location : " + angular.toJson(newValue, true)); 
}); 

4)または1つ

$scope.$on('g-places-autocomplete:select', function(event, place) { 
    console.log("New Location: " + JSON.stringify(place)); 
}); 

イェーイは、そのが行われ、この中で、それを初期化します!

関連する問題