我遇到了一个特殊的问题。
我在HTML中有下拉列表的视图:
<div ng-controller='ConfigurableInputController as configurableInput'>
<select class="fixed-input"
ng-model="configurableInput.selectedCriteria"
ng-change="configurableInput.update()"
ng-options="criterion.selected as criterion.name for criterion in configurableInput.criteriaList">
<option value="">--Please select the comparison criteria--</option>
</select>
上面显示了下拉列表中的3个选项:商店,频道和权限。 当我将选项从商店更改为频道或权限或任何组合时,视图会更改(输入框,某些标签等)。
控制器中的我的update()方法执行此操作:
configurableInput.update = function () {
configurableInput.permission = "";
configurableInput.id1 = "";
configurableInput.id2 = "";
configurableInput.items1 = "";
configurableInput.items2 = "";
configurableInput.defaultValueArray = [];
configurableInput.permissionsArr = [];
}
在选择下拉项目时,我点击了一个从Db中检索信息的按钮。
有两种方法可以在ng-click上调用,但是给我带来麻烦的方法就是这个方法在服务方法中:
StoreConfigurableService.$inject = ['$q', '$http', 'ApiBasePath'];
function ConfigurableService($q, $http, ApiBasePath) {
var service = this;
var defaultValueArr = [];
var permissionsArr = [];
var items1 = "";
var items2 = "";
service.retrievePermissions = function (criterion, id1, id2, rlNumber1, rlNumber2) {
$q.all([
$http.get(ApiBasePath + "/" + criterion + "/" + id1 + "/" + rlNumber1),
$http.get(ApiBasePath + "/" + criterion + "/" + id2 + "/" + rlNumber2)
])
.then(function (response) {
items1 = response[0].data;
items2 = response[1].data;
if (criterion === 'Permissions') {
var processed = false;
permissionsArr = makePermissionsArray(permissionsArr, items1, items2, processed);
}
})
.catch(function (errorResponse) {
console.log("Error: " + errorResponse);
throw errorResponse;
});
};
... so on
在我的makePermissionsArray()中,我这样做:
function makePermissionsArray(arr, items1, items2, processed) {
var map = items1.storePermissions;
var map2 = items2.storePermissions;
var map3 = items1.allPermissions;
for (var key in map) {
arr.push({
'code': key,
'description': map3[key],
'repStorePermission1': map[key],
'repStorePermission2': map2[key]
});
}
}
我通过以下方式将此权限转发给控制器:
service.getPermissionsArr = function () {
return permissionsArr;
};
注意&#39; arr&#39;在方法的参数中,makePermissionsArray()没有初始化,因为我通过在参数中传递permissionsArr来获取它。
现在流程如何:
我以为我没有在update()方法中正确清除数组,经过一些长时间的搜索后我发现并更改了这些数组的初始化:
configurableInput.defaultValueArray = [];
configurableInput.permissionsArr = [];
到
configurableInput.defaultValueArray.length = 0;
configurableInput.permissionsArr.length = 0;
在我的update()方法中。
现在发生的是:
我得到的错误是:
arr.push({
'code': key,
'description': map3[key],
'repStorePermission1': map[key],
'repStorePermission2': map2[key]
});
由于这个问题,我真的在撕扯我的头发。有人可以帮我解决错误吗?