$http.get
AngularJS での複数のソースからの起動について質問があります。以下のコードは非常に単純です$scope.test
。HTML の 1 つのボタンのクリック ハンドラである関数があります。これ$http.get
は正常に動作します。次に$http.get
、サーバーからデータを取得し、基本的なプリミティブ チャートを作成します。非常にシンプルで、これも機能します。$http.get
次に、すべてのチャート ノードにボタンを追加し、ボタン ハンドラーに別の呼び出しを実行したいと思います。しかし、これはうまくいきません!
コードは次のとおりです。
$scope.test = function () {
console.log('Klic na ID 1');
$scope.commonController.getData('orgunit/1?jsonDepth=3')
.success(function(workpositionData,status,headers,config) {
console.log('Klic na ID 1 OK');
$scope.workPositions = workpositionData.workPositions;
}).error(function(data,status,headers,config) {
commonController.error('Pri branju delovnih mest je prišlo do napake: '+data.description);
});
};
var options = new primitives.orgdiagram.Config();
var itemB, itemC, itemD, itemE;
var rootItem = new primitives.orgdiagram.ItemConfig();
options.rootItem = rootItem;
options.cursorItem = rootItem;
options.hasSelectorCheckbox = primitives.common.Enabled.True;
var buttons = [];
buttons.push(new primitives.orgdiagram.ButtonConfig("add", "ui-icon-folder-open", "Add0"));
options.buttons = buttons;
options.onButtonClick = function (e, data) {
console.log('Klic na ID '+data.context.id);
$http.get('proxy/api/orgunit/' + data.context.id + '?jsonDepth=3')
.success(function(workpositionData,status,headers,config) {
console.log('Klic na ID '+data.context.id + ' OK');
$scope.workPositions = workpositionData.workPositions;
}).error(function(data,status,headers,config) {
commonController.error('Pri branju delovnih mest je prišlo do napake: '+data.description);
});
};
$http.get('proxy/api/orgunit/tree?jsonDepth=2')
.success(function(orgUnitsData,status,headers,config) {
console.log('Reading orgunit tree ok');
rootItem.title = orgUnitsData.orgUnits[0].title;
rootItem.description = orgUnitsData.orgUnits[0].description;
rootItem.id = orgUnitsData.orgUnits[0].id;
rootItem.hasSelectorCheckbox = false;
rootItem.image = "http://www.basicprimitives.com/demo/images/photos/a.png";
$scope.addItems(rootItem, orgUnitsData.orgUnits[0].subordinates, 0);
jQuery(".basicdiagram").orgDiagram(options);
}).error(function(data,status,headers,config) {
console.log('Reading orgunit not ok');
});
このチャートを作成するための多くの組み合わせ(ディレクティブ、個別のテンプレートとコントローラーなど)を試しましたが、何も機能しません。チャート ノートのボタンからの $http.get 呼び出しが起動しません (Chome 開発者ツールのネットワークには何もありません)。
しかし、ここで興味深いのは、テスト関数をもう一度実行すると (html ボタンをクリック)、テスト関数からの応答とチャート ボタンからの $http.get からの応答を取得することです。チャート ボタンからの $http.get 呼び出しが何かを待っているように見え、この何かが現れると起動します。
この問題の解決策を知っている人はいますか? シナリオ実行テスト、実行チャート ボタン機能、実行テストのコンソール出力は次のようになります (太字はチャート ボタン機能からのコンソール エントリ、太字はテスト機能からの非太字:
クリックなID 1 クリックなID 1 OK クリックなID 4 クリックなID 1 クリックなID 1 OK クリックなID 4 OK
これについて何か考えがある場合はお知らせください。 アップデート
https://github.com/angular/angular.js/issues/2794#issuecomment-18807158にあるソリューションで解決したので、呼び出し関数を $scope.$apply でラップしました。
$scope.$apply(function() {
console.log('Klic na ID ' + data.context.id);
$scope.commonController.getData('orgunit/' + data.context.id + '?jsonDepth=3')
.success(function(workpositionData,status,headers,config) {
console.log('Klic na ID ' + data.context.id + ' OK');
$scope.workPositions = workpositionData.workPositions;
}).error(function(data,status,headers,config) {
commonController.error('Pri branju delovnih mest je prišlo do napake: '+data.description);
});
});
よろしくお願いします