使用不触发模型更改的服务使用 $http 更新模型
Update model with $http using a service not triggering model change
我有以下型号:
var MODEL = { myTable: [], anotherTable: [] }; //--- initially set as empty arrays
MODEL
是一个全局变量,用于绑定不同控制器中的应用程序模型。
我开发了一个更新模型的服务,从 php 页面获取数据 returns table 行:
myApp.factory('myAppUtils', function($http) {
return {
updateModelTable: function(tableName) {
var pageToCall = "";
var params = "";
switch(tableName){
case 'myTable':
pageToCall = "myTable.php";
params = "";
break;
case 'anotherTable':
break;
default:
break;
}
var updateModel = function(tableName, data){
MODEL[tableName] = data;
};
var url = "/" + pageToCall;
$http.get(url).
success(function(data, status, headers, config) {
updateModel(tableName, data);
}).
error(function(data, status, headers, config) {
alert("error");
});
}
};
});
然后是控制器之一:
myApp.controller("MyTableCtrl", function($scope, myAppUtils){
$scope.table = MODEL.myTable;
myAppUtils.updateModelTable("playersTable");
});
一旦我 运行 应用程序正确调用了 myAppUtils.updateModelTable()
函数,它确实成功更新了 MODEL
但 MyTableCtrl
控制的视图不会相应更新.
我想做的是设置某种 CRUD 操作,从 sql 数据库获取和设置值。例如,我想插入一条新记录,然后调用更新函数来更新模型和视图,但这并没有发生。
这是"angular"做事的正确方法吗?
有什么提示吗?我做错了什么?
提前致谢
您可以使用单独的服务来缓存数据,而不是使用全局变量在控制器之间共享数据,因为Angular服务是单例的。
所以在你的情况下,创建一个服务
myApp.service('modelService',function() {
var model = {
myTable: [],
anotherTable: []
};
return model;
});
然后在你的工厂里,注入这个服务,把你的updateModel
改成
var updateModel = function(tableName, data){
modelService.myTable = data;
};
然后在你的控制器中,注入 modelService
并将其绑定到 $scope
作为
$scope.model = modelService;
最后,在你看来,你可以访问model.myTable
,一旦你在你的工厂更新它们就可以自动更新。
我有以下型号:
var MODEL = { myTable: [], anotherTable: [] }; //--- initially set as empty arrays
MODEL
是一个全局变量,用于绑定不同控制器中的应用程序模型。
我开发了一个更新模型的服务,从 php 页面获取数据 returns table 行:
myApp.factory('myAppUtils', function($http) {
return {
updateModelTable: function(tableName) {
var pageToCall = "";
var params = "";
switch(tableName){
case 'myTable':
pageToCall = "myTable.php";
params = "";
break;
case 'anotherTable':
break;
default:
break;
}
var updateModel = function(tableName, data){
MODEL[tableName] = data;
};
var url = "/" + pageToCall;
$http.get(url).
success(function(data, status, headers, config) {
updateModel(tableName, data);
}).
error(function(data, status, headers, config) {
alert("error");
});
}
};
});
然后是控制器之一:
myApp.controller("MyTableCtrl", function($scope, myAppUtils){
$scope.table = MODEL.myTable;
myAppUtils.updateModelTable("playersTable");
});
一旦我 运行 应用程序正确调用了 myAppUtils.updateModelTable()
函数,它确实成功更新了 MODEL
但 MyTableCtrl
控制的视图不会相应更新.
我想做的是设置某种 CRUD 操作,从 sql 数据库获取和设置值。例如,我想插入一条新记录,然后调用更新函数来更新模型和视图,但这并没有发生。
这是"angular"做事的正确方法吗?
有什么提示吗?我做错了什么?
提前致谢
您可以使用单独的服务来缓存数据,而不是使用全局变量在控制器之间共享数据,因为Angular服务是单例的。
所以在你的情况下,创建一个服务
myApp.service('modelService',function() {
var model = {
myTable: [],
anotherTable: []
};
return model;
});
然后在你的工厂里,注入这个服务,把你的updateModel
改成
var updateModel = function(tableName, data){
modelService.myTable = data;
};
然后在你的控制器中,注入 modelService
并将其绑定到 $scope
作为
$scope.model = modelService;
最后,在你看来,你可以访问model.myTable
,一旦你在你的工厂更新它们就可以自动更新。