2016-02-06 28 views
0

我試圖弄清楚爲什麼我似乎無法調整簡單的角度下拉重置。重置Ionic中的角度下拉選項 - 將值從初始值更改後不會重置

當視圖加載時,按下「重置」按鈕,並根據控制器的功能指示,將任何值選擇到另一個值。這可以在頁面加載時正常工作,但是如果更改下拉列表中的值,那麼請單擊「重置」,它不會執行任何操作。它不會重置該功能中指定的下拉菜單,我無法弄清楚。

重現步驟:

  1. 頁面加載
  2. 點擊 「重置」 按鈕
  3. 下拉值更改爲 「日本」
  4. 值更改回爲 「英語」
  5. 點擊「重置「按鈕
  6. 沒有。它應該將該值改回英文,但不會。

我已經下降到最基本的例子用我Codepen極其鹼性離子例如水煮一切:

http://codepen.io/starshock/pen/EPdXpz

基本上,這裏是我的控制器代碼:

.controller('DropdownController', [ '$scope', '$state', function($scope, $state) { 
     $scope.navTitle = 'Dropdown Reset'; 

     $scope.reset = function() { 
      $scope.selectedOption = $scope.languages[0]; 
     } 

     $scope.languages = [ 
      { name: "English"}, 
      { name: "Japanese"} 
     ]; 
     $scope.selectedOption = $scope.languages[1]; 
    }]); 

這裏是我的模板:

<script id="entry.html" type="text/ng-template"> 
    <ion-nav-bar animation="nav-title-slide-ios7" 
       type="bar-positive" 
       back-button-type="button-icon" 
       back-button-icon="ion-ios7-arrow-back"> 
    </ion-nav-bar> 

    <ion-view title="{{navTitle}}" class="bubble-background"> 

     <ion-content has-header="true" padding="true"> 

      <div class="item item-input item-select" href="#"> 
     <label> 
     <div class="input-label"> 
      Select language 
     </div> 
     <select 
      data-ng-options="language.name for language in languages" 
      data-ng-model="selectedOption"> 
     </select> 
     </label> 
    </div> 
      <button class="button button-positive" ng-click="reset()">Reset</button> 

     </ion-content> 
    </ion-view> 
</script> 

我一直在努力解決這個問題幾個月,我有一些使用類似代碼的實例。任何角度的主人有什麼想法? :D

+0

在角度上,你必須小心地解釋原型繼承,並在'ng-model'中使用一個點。 (實質上是指對象屬性而不是基元類型)。在離子中,這是更加必要的,因爲許多離子特定指令('ion-view','ion-content'等)創建子範圍,其中的元素不一定與控制器中預期的原始屬性綁定。如果添加一些日誌語句,您會看到下拉列表綁定的'selectedOption'與控制器嘗試訪問的'$ scope.selectedOption'不同。 – Claies

+0

基本上,由@potatopeelings提供的答案是正確的,轉換爲對象(在答案示例中爲「過濾器」)強制參考每次都是相同的。 – Claies

回答

2

您需要稍微更改控制器以每次引用同一對象(有關基本知識,請參見https://stackoverflow.com/a/17607794/360067和引用的答案,即https://stackoverflow.com/a/14049482/360067)。

假設你想要的是英語(如果它是日本人,只需要改變兩地指數爲1)的默認值

$scope.reset = function() { 
     $scope.filter.selectedOption = $scope.languages[0]; 
    } 

    ... 

    $scope.filter = { 
     selectedOption: $scope.languages[0] 
    }; 

,並在你的HTML

<select 
     data-ng-options="language.name for language in languages" 
     data-ng-model="filter.selectedOption"> 
    </select> 

CodePen - http://codepen.io/anon/pen/KVGqOG

+1

哦。我的。 Gawwwd。謝謝你,這非常適合我,增加了我對角度範圍的理解。這張圖片適合你:http://cdn.meme.am/instances/400x/59166328.jpg –