如何在AngularJS中执行数据库操作后更新列表
我有一个简单的CRUD应用程序,运行在带有Apache和MySQL的Linux服务器上。数据库操作由PHP脚本完成。crud操作工作正常,服务器与开发机器位于不同的机器上 一切都很好,但当我尝试在创建、更新或删除操作后列出数据库中的项目时,列表有时会更新,有时不会 这是密码 index.html:如何在AngularJS中执行数据库操作后更新列表,angularjs,Angularjs,我有一个简单的CRUD应用程序,运行在带有Apache和MySQL的Linux服务器上。数据库操作由PHP脚本完成。crud操作工作正常,服务器与开发机器位于不同的机器上 一切都很好,但当我尝试在创建、更新或删除操作后列出数据库中的项目时,列表有时会更新,有时不会 这是密码 index.html: <body ng-controller="GetScenesCtrl"> <ul> <li ng-repeat="scene in scen
<body ng-controller="GetScenesCtrl">
<ul>
<li ng-repeat="scene in scenes">
<em><a href="#/getscene/{{scene.scene_id}}">{{scene.scene_name}}</a></em>
</li>
</ul>
控制器:
App.controller('GetScenesCtrl', function($scope, Scenes, ScenesService) {
$scope.scenes = Scenes.query();
//$scope.scenes = ScenesService.setScenes();
//$scope.scenes = ScenesService.getScenes();
//$scope.$on('updscenes', function(event, scenes) {
// $scope.scenes = scenes;
//});
$scope.updateScenes = function() {
$scope.scenes = Scenes.query();
};
});
好的,当index.html第一次加载时,我使用Scenes.query()方法初始化列表。updateScenes()-方法在CRUD-操作后被调用以更新作用域。此呼叫来自另一个控制器。像这样:
App.controller('AddSceneCtrl', function($scope, Scenes, ScenesService) {
$scope.addScene = function(scene) {
Scenes.add({
nimi : scene.name,
sisalto : scene.content
});
$scope.updateScenes();
//$scope.scenes = ScenesService.getScenes();
//ScenesService.setScenes();
}
});
我尝试过的另一种更新范围的方法是广播方式,这两种方式的工作原理类似,有时列表没有更新。为什么会这样?一定有更好的方法,角度更好的方法。我是个有棱角的新手,所以这里一定有我错过的东西
斯通(Stone)下面引用@Duncan的评论: 重要的是要认识到调用$resource对象方法会立即返回一个空引用(对象或数组取决于isArray)。从服务器返回数据后,现有引用将填充实际数据。这是一个有用的技巧,因为通常资源被分配给模型,然后由视图进行渲染。如果对象为空,则不会进行渲染,一旦数据从服务器到达,对象将填充数据,视图将自动重新渲染自身,显示新数据。这意味着在大多数情况下,不必为操作方法编写回调函数 可以使用以下参数调用类对象或实例对象上的操作方法: 使用(value,responseHeaders)参数调用成功回调。使用(httpResponse)参数调用错误回调 因此,你应该:
Scenes.add(
{
nimi : scene.name,
sisalto : scene.content
},
function() { // this function is invoked when the add is successful
$scope.updateScenes();
});
或者干脆
Scenes.add(
{
nimi : scene.name,
sisalto : scene.content
},
$scope.updateScenes);
您发布的代码似乎只是查询,没有显示任何更新。但是,我认为发生的情况是更新是异步的,因此如果在更新后立即获取数据,它可能会命中服务器上的另一个线程,并且结果实际上可以在原始更新完成之前返回。
$save()
方法使用一个回调函数,您可以使用该函数判断保存何时完成。是的,我在文章中添加了另一个控制器。我想这可能和时间有关。不幸的是,我是一个无所事事的人,我不知道该怎么做,这个$save()方法使用了一个回调函数,您可以使用它来
。所以,如果你能详细说明我将如何做到这一点?好的,似乎工作!非常感谢。还有一个小问题:为什么$scope.updateScenes
有效,而$scope.updateScenes()
无效?上面的第二个片段与第一个类似。它将updateScenes函数传递给add()方法。当收到成功响应时,add()方法调用此updateScenes函数。将上面第二个代码段中的updateScene
替换为updateScenes()
,将调用updateScene函数,并将此函数的结果(可能未定义)传递给add()
函数。
Scenes.add(
{
nimi : scene.name,
sisalto : scene.content
},
function() { // this function is invoked when the add is successful
$scope.updateScenes();
});
Scenes.add(
{
nimi : scene.name,
sisalto : scene.content
},
$scope.updateScenes);