使用ng-init时,复选框选择会丢失

时间:2017-08-21 10:58:04

标签: javascript angularjs

我想基于某个值初始化(检查)我的复选框。因为我正在使用ng-init但问题是当我加载另一个模板并再次回到之前的模板时我认为ng-init得到呼叫而我松开那些新的复选框选择。

代码:

$scope.lst = [
{item:'banana', selected:true},
{item: 'apple', selected:false},
{item:'milk', selected:false},
{item: 'tomato', selected:false},
{item:'juice', selected:false}
]
});
<div ng-repeat="item in lst">
     <input ng-model="item.parentSelected" ng-init="item.parentSelected=item.selected" type="checkbox">
</div>

所以默认情况下我想将香蕉显示为选中,但问题是当用户选择苹果和牛奶时我加载另一个模板并且用户回到同一页面(我再次加载第一个模板)所以我想ng-init可以调用再次,我放松了我的苹果和牛奶选择。

当我删除ng-init时,我选择了苹果和牛奶。

更新我认为问题仅在于使用ng-init,因为ng-model与parentSelected绑定,而对于apple和milk,我有selected as false所以当我选择苹果和牛奶时然后我加载另一个模板并再次加载以前的模板ng-init由于ng init="item.parentSelected=item.selected"

而仅选择香蕉

如何在我的模板加载时默认选择apple并保留其他选择?

1 个答案:

答案 0 :(得分:2)

它会丢失,因为再次打开该视图时,控制器再次获取init,之前的选择会丢失,因为视图从零开始再次初始化。

定义服务存储选择的位置,将其注入控制器并在服务中存储选定的值。 然后在ng-init调用控制器内部定义一个函数。在此函数内部检查是否已存储值:如果已存储,则将值分配给存储的值,否则预先选择第一个条目。

我希望它有意义