我有一组需要监控的下拉列表。一旦下拉列表选择了一个未定义的值(即默认值),那么我们应该使用这些值触发ajax请求。我的手表组代码如下。
$scope.$watchGroup([
'formData.DDL1',
'formData.DDL2',
'formData.DDL3'],
function (newValues, oldValues, $currentScope) {
// If any of the new values are undefined, then do *not* fire a new request
for (var i in newValues) {
if (newValues[i] === undefined)
return;
}
DataService.getData(newValues[0], newValues[1], newValues[2])
.then(function (data) {
$currentScope.data = data;
});
});
<label for="ddl1" class="control-label pull-left">DDL1</label>
<select ng-model='formData.DDL1'
class='form-control'
ng-options='option.id as option.name for option in options'
required
name='DDL1'>
<option value=''>Please select an option.</option>
</select>
不幸的是,出于某种原因,每次我改变一个下拉列表(即,只选择一个不同的选项) - 下面的示例DDL - 然后$watchGroup
会调用两次回调。这导致奇怪的行为,因为$currentScope.data
将回调中的数据连接到自身(而不是破坏性赋值,这是你可以看到我放入的内容)。
显然,$watchGroup
处于角度1.3.X(我目前正在使用1.3.0-rc.1),这仍然是最前沿的,所以我期待一些问题。有没有其他人遇到过这个问题和/或修复过它?
为简洁起见,已更换名称。
答案 0 :(得分:0)
我认为你的代码应该是这样的:
控制器:
$scope.ddlUpdated = function(){
DataService.getData($scope.formData.DDL1, $scope.formData.DDL2, $scope.formData.DDL3)
.then(function (data) {
$currentScope.data = data;
});
}
查看:
<label for="ddl1" class="control-label pull-left">DDL1</label>
<select ng-model='formData.DDL1'
class='form-control'
ng-options='option.id as option.name for option in options'
required
name='DDL1' ng-change="formData.DDL1 && ddlUpdated()">
<option value=''>Please select an option.</option>
</select>
我不会使用&#34;手表功能&#34;在控制器中,我会改为使用{3}中的ngChange
directive而不是selects
。
最常用的使用方法&#34; watch&#34;函数在自定义指令的链接函数内部,但您不需要为此设置自定义指令,因为Angular已经为我们提供了ngChange
指令,该指令可用于通知控制器具有的更改发生在视图中。让我们这样说吧:在Angular中,控制器生成在视图中通过指令消耗的模型,但指令也负责在事情发生时与控制器进行通信。 #34;在视图中。