我正在编写一些用于添加和编辑资源的表单。我正在使用Angucomplete-alt(https://github.com/ghiden/angucomplete-alt)和我自己的下拉指令来从数据库中获取选择。它们与主窗体位于不同的控制器中。我的常规文本字段在编辑表单上填写正常,但是我对Angucomplete有问题并选择。范围数据存在于页面加载中。我已经编写了一个函数来使用URL中的ID来获取它。但除非您重新加载页面,否则它们并不总是填充。我怎样才能让它们每次都填充?
这是填充表单的函数:
$scope.popForm = function(clientId) {
var config = {
params: {clientId: $stateParams.clientId},
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
};
$http.get('assets/php/clients/pop_client.php', config)
.then(function(data) {
var realStatus = data.data.status;
if(realStatus == 'success'){
//Set the $scope from the JSON response
$scope.client = data.data.client;
//Broadcast a bunch of events with data to the dropdowns
$timeout(function() {
$rootScope.$broadcast('setTypeDropdown', data.data.client.type);
$rootScope.$broadcast('setCatDropdown', data.data.client.category);
$rootScope.$broadcast('setTeamDropdown', data.data.client.team);
$rootScope.$broadcast('setA1Dropdown', $scope.client.assigned1);
$rootScope.$broadcast('setA2Dropdown', $scope.client.assigned2);
});
}
});
};
我有另一个控制选择的控制器,这就是为什么有数据广播到其孤立的范围。这是$ on函数之一,因为它们基本相同。 (必须有一种不那么令人费解的方式......)
// Options are the select options that I get from the database
// for each instance of the select controller
$scope.$on('setTypeDropdown', function(event, type) {
var i = 0;
$.each($scope.options, function(){
if (this.value == type){
$scope.client.type = $scope.options[i];
}
i++;
});
});
那么,有没有更好的方法呢?因为这不太有用......
编辑: Angucomplete-alts现在运作良好。只是我复杂的选择担心。不管是否对他们进行去角度化并且不使用我的指令会更好。