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)