AngularJS: ng-model没有在控制器实例化中应用



我正在使用Angular创建一个web应用程序规划器,我在<select>框上遇到了一些困难,该框不根据ng-model表示的变量改变值。

我的架构如下:

我使用ui-router,这给了我不同的视图状态,一个为我的计划器的每一页。根HTML页面有一个名为MainController的控制器。这就是我设置JSON模型的地方,$scope.Master = {},我想在整个规划器中使用。规划器的所有页面都应该继承这个模型,并继续修改/添加。

然后我有我的4页计划,如:

Start -> Accounts -> Settings -> Review

每个页面都有自己的控制器,每次访问该页面时都会实例化该控制器。在Start页面上,我有一个<select>框,其中ng-model="$scope.Master.Start.selectedAccount"使用StartController动态填充(因此每次我来到开始页面时它都会填充)。

这个<select>在第一次到页面时工作得很好,但是如果我去Accounts然后回来,选择框会回到默认值,"请选择一个帐户",而不是在绑定到<select>框的$scope.Master.Start.selectedAccount模型中选择的帐户

我想我可以做一些像$scope.$apply或其他东西,以便重新应用绑定到DOM对象,但这只是给了我一个错误,说它已经消化。

如何在页面加载2次或更多次后将绑定应用到<select>框?

这可能是因为每次返回到原始页面时,都会实例化一个新的控制器,因为它是在您离开DOM时从DOM中删除的。因此$scope.Master.Start.selectedAccount。要保存它,您可以使用

  1. 在主应用上使用service/factory单例来保存这个值https://docs.angularjs.org/guide/services !

  2. $scope.Master.Start.selectedAccount保存为全局变量https://docs.angularjs.org/api/ng/service/美元rootScope

  3. 把控制器放到外面

我真的很抱歉…我意识到我正在使用ng-repeat而不是ng-options填充<select>不知道我是如何管理的…这就是问题所在

最新更新