2016-04-06 32 views
0

我正在製作一個離子/角度的網絡應用程序,用戶可以從Google地圖彈出的模式或從Google地圖自動完成搜索框。

爲了獲得最佳用戶體驗,我希望用戶在地圖上選擇的地址輸入到搜索框中。

如果我先在地圖上選擇一個位置,然後通過輸入工作的搜索框來改變位置。但是,如果我先在搜索框中鍵入位置,然後嘗試在地圖上選擇一個位置,則輸入框中的文本保持不變。

我認爲這是你需要獲得自動完成工作

$scope.disableTap = function(){ 
    container = document.getElementsByClassName('pac-container'); 
    // disable ionic data tab 
    angular.element(container).attr('data-tap-disabled', 'true'); 
    // leave input field if google-address-entry is selected 
    angular.element(container).on("click", function(){ 
     document.getElementById('searchBar').blur(); 
    }); 
}; 

這裏的離子指令做的是搜索框聲明

var input = document.getElementById('searchBar'); 
var autocomplete = new google.maps.places.Autocomplete(input); 

我有一個搜索框關聯的NG-模型

<input type="text" id="searchBar" ng-focus="disableTap()" placeholder="Type address here..." 
ng-model="inputText"> 

我正在更新autocomp中的$ scope.inputText變量勒特監聽器,如下:

$scope.inputText = autocomplete.getPlace().formatted_address; 

,並在地圖上監聽器,如下:

$scope.inputText = address.formatted_address; 

是否殘影功能覆蓋NG-模式?我弄錯了嗎?

任何人都可以看到爲什麼我的ng模型更新,如果我有地圖然後搜索框,但不是搜索框然後地圖?

任何幫助,將不勝感激感謝

+0

你可以在plunker或jsfiddle上發佈樣本嗎? – Hoyen

回答

0

這很自然的問題存在遍佈這個地方,並且描述的問題是如此的不同,每次該網站搜索失敗。

簡單的答案是,不要直接在$ scope下面存儲值。這不是禮貌,而是一旦理解了它的原因,就是必要的。您可以在下面的鏈接閱讀更多關於它的信息。

爲了解決你的情況,你應該做這樣的事情在你的控制器或處理器,

$scope.address.formatted = ... 

,並訪問他們像這樣在您的看法,

<input type="text" placeholder="..." ng-model="address.formatted" name="address.formatted"> 

引述相關章節鏈接,

不同之處在於我們不直接在範圍上存儲數據。現在,當ng-model想寫時,它實際上會進行讀取,然後寫入。它從範圍讀取person屬性,並且這將從子範圍起作用,因爲子範圍將向上搜索以進行讀取。一旦找到人,它會寫入person.first_name,這是沒有問題的。它只是工作。

這裏是鏈接:Nested Scopes in AngularJS on jimhoskins.com

看到,這是一個幾個月大,你may've已經解決了這個問題,但無論如何,離開了答案。 希望這有助於。

相關問題