【发布时间】:2017-08-01 20:32:23
【问题描述】:
我有一个我似乎无法解决的特定问题。
在 html 中我有以下代码:
<select ng-model="$parent.proizvod" ng-options="i.id_proizvod as i.proizvod for i in proizvodiServer">
<option>Select</option>
</select>
在我的控制器中:
$rootScope.proizvod = '1';
所以当页面第一次加载时,第一个选项被选中。如果我将$rootScope.proizvod = '1'; 更改为$rootScope.proizvod = '3'; 它将加载第三个选项。
现在,当您选择其他值时,它会将其存储在 $rootScope.proizvod 中,但稍后,在某些功能中,我想将 $rootScope.proizvod 重置为“1”,但它似乎不起作用.
我在这里错过了什么?
附:如果没有$parent.proizvod,我的选择甚至不会更改$rootScope.proizvod 的值。
编辑:这是另一个功能:
$rootScope.upisPodataka = function() {
setTimeout(function () {
$rootScope.proizvod = '1';
$scope.$apply();
}, 2000);
$state.go('app.podesenost_grilla', {}, {
reload: true
});
upisPodataka 函数在点击按钮时被调用。
【问题讨论】:
-
显示你的“其他功能”
-
和控制器里面的基本一样。我现在已经编辑了问题。
-
为什么要使用 rootscope 来跟踪选择选项?所有范围都将继承该值..那是糟糕的设计。而是将值附加到控制器的范围。此外,使用 $setTimeout 而不是使用 setTimeout 并手动触发摘要循环。 $setTimeout 将在 $apply 中为您处理这些问题。
-
我使用 $rootScope 是因为我在 2 个控制器中使用了该变量。
-
@MarcusH 封装 window.setTimeout 的 Angular 服务是 $timeout,见AngularJS $timeout API Reference。
标签: javascript angularjs angularjs-rootscope javascript-inheritance