2015-02-09 87 views
0

我查看代碼文件settings.html:數據綁定不選擇框視圖模板工作

<select ng-model="language" ng-options="item.ID as item.NAME for item in allLanguages"> 

下面是我的控制器JS文件中的代碼。

var app = angular.module('index.controllers', ['ionic']); 

app.run(function($rootScope, $ionicModal) { 
    $rootScope.allLanguages = [{ 
      'ID': "en", 
      "NAME": "English" 
     }, { 
      'ID': "ta-IN", 
      "NAME": "Tamil" 
     }]; 

    $rootScope.language = $rootScope.allLanguages[1]; 

    $ionicModal.fromTemplateUrl('templates/settings.html', { 
     scope: $rootScope, 
     animation: 'slide-in-up' 
    }).then(function(modal) { 
     $rootScope.modal = modal; 
    }); 


    $rootScope.showSettings = function() { 
     $rootScope.modal.show(); 
    } 

    $rootScope.closeSettingsModal = function() { 
     // always empty object here 
     console.log("Lang:" + JSON.stringify($rootScope.language)); 

     $rootScope.modal.hide(); 
    } 
} 

問題:

其被分配給rootScope被定義爲settings.html模板視圖文件訪問的allLanguages對象陣列。值在使用該數組的選擇框中填充。所以這證實了數據綁定的一種方式工作正常。

但是在我的代碼中$ rootScope.language總是空的。更新的值不存在於其中。我做錯了什麼?

PS:此代碼是一個大型應用程序的一部分,因此很難將其隔離以創建小提琴並重現錯誤。

+0

模板嗯,我不知道,如果你是顯示所有的HTML或不是,但你需要關閉標籤。我嘗試了一個使用$ scope而不是$ rootScope的示例,它工作得很好。 – Scott 2015-02-09 18:46:30

回答

1

我的猜測是你錯過了一個點。由於$ rootScope和ng-model指令之間可能有層次的範圍。 ng-model將在它遇到的第一個作用域上創建「language」變量,並且不會委託給$ rootScope進行搜索。如果我的猜測是正確的,那麼解決方案很簡單,只需要一個連接到$ rootScope的對象,您將爲其附加語言變量。

$rootScope.someObject = { language: '' }

,並用它在這樣ng-model="someObject.language"

+0

你能解釋一下嗎? $ rootScope.someObject對應於我的代碼的哪一部分? – Purus 2015-02-09 18:40:42

+0

如果範圍不會委託給更高級別,我想知道設置值的單向綁定是如何工作的? – Purus 2015-02-09 18:42:16

+0

而不是隻把變量放在$ rootScope'$ rootScope.language = $ rootScope.allLanguages [0]'上,首先將它包裝在一個對象中,然後才把包裝對象放在$ rootScope上。 – getOffMyLawn 2015-02-09 18:43:47