数据绑定在选择框视图模板中不起作用

时间:2015-02-09 18:11:41

标签: angularjs ionic-framework

我的观看代码文件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的allLanguages对象数组由定义为settings.html的模板视图文件访问。使用该数组在选择框中填充值。所以这证实了一种数据绑定方式正常。

但在我的代码中,$ rootScope.language始终为空。更新后的值不存在。我做错了什么?

PS:此代码是大型应用的一部分,因此很难将其隔离以创建小提琴并重现错误。

1 个答案:

答案 0 :(得分:1)

我的猜测是你错过了一个点。由于$ rootScope和你的ng-model指令之间可能存在多个Scopes层。 ng-model将在遇到的第一个范围上创建“语言”变量,并且不会委托$ rootScope进行搜索。如果我猜的是正确的解决方案很简单,只需要附加到$ rootScope的对象,您将附加语言变量。

$rootScope.someObject = { language: '' }

并在模板中使用它,例如ng-model="someObject.language"