AngularJS视图未使用延迟和工厂更新
我目前遇到一个问题,当我尝试创建一个新设置时,我的视图在刷新页面之前不会被更新。谁能给我指出正确的方向吗?如果我走错了方向,请让我知道更好的方法AngularJS视图未使用延迟和工厂更新,angularjs,angularjs-service,Angularjs,Angularjs Service,我目前遇到一个问题,当我尝试创建一个新设置时,我的视图在刷新页面之前不会被更新。谁能给我指出正确的方向吗?如果我走错了方向,请让我知道更好的方法 app.factory('SettingsFactory', function ($http, $q) { //$scope.settingData = {} return { getAllOptionsAsync: function(callback) { var deferred = $q.defer(); $http.get
app.factory('SettingsFactory', function ($http, $q) {
//$scope.settingData = {}
return {
getAllOptionsAsync: function(callback) {
var deferred = $q.defer();
$http.get('/api/settings').success(callback);
},
deleteOptionAsync: function(id) {
//console.log('reached');
var deferred = $q.defer();
$http.delete('/api/settings/' + id);
},
createOptionAsync: function(settingData) {
var deferred = $q.defer();
$http.post('/api/settings', settingData).success(function(data) { console.log(data);
deferred.resolve(data);
// console.log(deferred.promise);
return deferred.promise;
});
}
};
});
var controllers = {};
controllers.SettingsController = function($scope, SettingsFactory) {
//$scope.settings = SettingService.list();
SettingsFactory.getAllOptionsAsync(function(results) {
//console.log(results);
$scope.settings = results;
});
$scope.create = function() {
// console.log('called');
// console.log($scope.formData);
SettingsFactory.createOptionAsync($scope.formData).then(function(data) {
console.log(data);
$scope.settings = data;
});
}
$scope.delete = function(id) {
//console.log(id.entity._id);
SettingsFactory.deleteOptionAsync(id.entity._id);
}
$scope.gridOptions = {
data: 'settings',
multiSelect: false,
columnDefs: [
{field: 'option'},
{field: 'value'},
{displayName: 'Edit', cellTemplate: '<button id="editBtn" type="button" class="btn btn-primary" ng-click="open(settings._id)" >Edit</button> <button id="deleteBtn" type="button" class="btn btn-primary" ng-click="delete(row)" >Edit</button> '}
]
};
}
app.factory('SettingsFactory',函数($http,$q){
//$scope.settingData={}
返回{
GetAlloptionAsync:函数(回调){
var deferred=$q.deferred();
$http.get('/api/settings').success(回调);
},
deleteOptionAsync:函数(id){
//console.log('reach');
var deferred=$q.deferred();
$http.delete('/api/settings/'+id);
},
createOptionAsync:函数(设置数据){
var deferred=$q.deferred();
$http.post('/api/settings',settingData).success(函数(数据){console.log(数据);
延迟。解析(数据);
//console.log(deferred.promise);
回报。承诺;
});
}
};
});
变量控制器={};
controllers.SettingsController=函数($scope,SettingsFactory){
//$scope.settings=SettingService.list();
SettingsFactory.GetAlloptionAsync(函数(结果){
//控制台日志(结果);
$scope.settings=结果;
});
$scope.create=function(){
//log('called');
//log($scope.formData);
SettingsFactory.createOptionAsync($scope.formData)。然后(函数(数据){
控制台日志(数据);
$scope.settings=数据;
});
}
$scope.delete=函数(id){
//console.log(id.entity.\u id);
SettingsFactory.deleteOptionAsync(id.entity.\u id);
}
$scope.gridOptions={
数据:“设置”,
多选:错,
columnDefs:[
{字段:'选项'},
{字段:'值'},
{displayName:'编辑',cellTemplate:'编辑'}
]
};
}
在中,然后或任何时候在回调中更新作用域时,您需要将$scope.settings=数据包装为scope.apply
$scope.$apply(function() {
$scope.settings=data;
});
在电话上打出来,所以可能有错误 我已经更新了我的代码,包括:
$scope.create=function(){SettingsFactory.createOptionAsync($scope.formData)。然后(function(data){console.log(data);$scope.$apply(function(data){$scope.settings=data;});console.log(data);};}
我现在收到错误类型错误:无法读取未定义的scope.apply函数的属性“then”。该函数没有像我的示例那样的参数。应该是function()而不是function(data)