使用 Angular ui-select 时模型出现意外变化
Unexpected change in a model when using Angular ui-select
我有一个 Angular ui-select 用于根据 selected 选项切换一些复选框(使用 ng-repeat
生成) .
复选框也可以手动切换,这就是问题所在。
场景如下:
- Select一个选项。某些复选框根据
$scope.recipes.available
模型上指定选项的 ingredients
属性 进行切换。
- 手动切换一个额外的复选框。
- Select select 上的不同选项。相应的复选框已正确切换。
- 切换回第一个 selected 选项。不仅切换最初在
ingredients
属性 上指定的复选框,还切换手动修改的复选框。在调试时,我发现 ingredients
属性 已被修改。
这 plunkr 说明了问题。
到目前为止,在阅读了无数范围界定问题(我是 Angular 的新手)并一次又一次地尝试重构我的代码之后,我仍然无法解决这个问题。
在继续尝试再次重构代码之前,我想了解这里发生了什么。
为什么要修改 ingredients
属性?
您的 bundle 数组正在您的 toggleBundleSelection 函数中更新。当配方选择改变时,没有任何东西可以重置阵列。由于 bundle 在 $scope 上,因此在控制器实例的生命周期内会保留这些值。
我有一个 Angular ui-select 用于根据 selected 选项切换一些复选框(使用 ng-repeat
生成) .
复选框也可以手动切换,这就是问题所在。
场景如下:
- Select一个选项。某些复选框根据
$scope.recipes.available
模型上指定选项的ingredients
属性 进行切换。 - 手动切换一个额外的复选框。
- Select select 上的不同选项。相应的复选框已正确切换。
- 切换回第一个 selected 选项。不仅切换最初在
ingredients
属性 上指定的复选框,还切换手动修改的复选框。在调试时,我发现ingredients
属性 已被修改。
这 plunkr 说明了问题。
到目前为止,在阅读了无数范围界定问题(我是 Angular 的新手)并一次又一次地尝试重构我的代码之后,我仍然无法解决这个问题。
在继续尝试再次重构代码之前,我想了解这里发生了什么。
为什么要修改 ingredients
属性?
您的 bundle 数组正在您的 toggleBundleSelection 函数中更新。当配方选择改变时,没有任何东西可以重置阵列。由于 bundle 在 $scope 上,因此在控制器实例的生命周期内会保留这些值。