我有一个简单的 CRUD 应用程序在带有 Apache 和 MySQL 的 Linux 服务器上运行。数据库操作由 PHP 脚本完成。crud 操作运行良好,服务器与开发机器位于不同的机器上。
一切都很好,但是当我尝试在创建、更新或删除操作后列出数据库中的项目时,列表有时会更新,有时不会。
这是代码。
索引.html:
<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>
服务:
angular.module('writServices', ['ngResource'])
.factory('Scenes', function($resource){
return $resource('/:id/:nimi/:sisalto/:pics', {}, {
query: {
url:'php/getscenes.php',
method:'GET',
isArray:true
}
});
App.service('ScenesService', function ($rootScope, Scenes) {
var scenes = [];
this.setScenes = function() {
scenes = Scenes.query();
$rootScope.$broadcast('updscenes', scenes);
};
this.getScenes = function() {
scenes = Scenes.query();
return scenes;
};
});
控制器:
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();
}
});
我尝试过的另一种更新范围的方法是广播方式,两种方式的工作方式相似,有时会导致列表未更新。为什么是这样?必须有更好的方法,即 Angular 方法来执行此操作。我是 Angular 的新手,所以这里一定有一些我错过的东西。
结石