Apache と MySQL を使用する Linux サーバー上で実行されている単純な CRUD アプリがあります。データベース操作は、PHP スクリプトによって行われます。Crud 操作は正常に機能しており、サーバーは開発中のマシンとは別のマシン上にあります。
ほとんどすべて問題ありませんが、作成、更新、または削除操作の後にデータベース内のアイテムをリストしようとすると、リストが更新される場合と更新されない場合があります。
これがコードです。
index.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の初心者なので、ここで見逃したものがあるに違いありません。
結石