私はQSocksを使用してAPI(Qlik Sense Engine API)に接続するAngularJSでWebアプリケーションを構築しています。
Qsocksは、NodeJSで記述されているQlik Sense Engine APIラッパーの軽量ラッパーですが、Web環境でもインポートできます。 QSocksにはNPMパッケージPromiseパッケージが含まれていますので、AngelsJS以外の約束を使用しています。
私のサービスは、次のようになります。私は、例えばでこのサービスを呼び出すときに、簡単な言葉で
var app_promise = (appFactory.activeConnection() ? appFactory.activeConnection() : appFactory.app());
this.getData = function(qMeasures, time) {
ratioChild.qHyperCubeDef.qMeasures[0].qDef.qDef = qMeasures;
ratioChild.qHyperCubeDef.qMeasures[0].qDef.qLabel = qMeasures;
ratioChild.qHyperCubeDef.qDimensions[4].qDef.qFieldDefs = [time];
ratioChild.qHyperCubeDef.qDimensions[4].qDef.qFieldLabels = [time];
var deferred = $q.defer();
app_promise.then(function (obj) {
obj.createChild(ratioChild).then(function (childObj) {
deferred.resolve(childObj);
});
});
return deferred.promise;
}
コントローラ。私はそこに他のオブジェクトを構築することができるオブジェクトを取得します。
側注: 私はapp_promise.then
とobj.createChild(ratioChild).then
は、NPMの約束パッケージ約束されているので、新しいAngularJSを約束ようにする必要があります。
これは私のコントローラは、(最初の部分)のように見える方法です:
if (!$rootScope.balanceSheetFixedObj) {
var fixYearsqMeasure = "Sum({<Jaar=>}Saldo)";
balanceSheetService.getData(fixYearsqMeasure, self.time).then(function (childObj) {
$rootScope.balanceSheetFixedObj = childObj;
return childObj;
}).then(handleFixData)
} else {
handleFixData();
}
これは私のコントローラは、(第二部)どのように見えるかです:
function handleFixData(childObj) {
childObj = (childObj) ? childObj : $rootScope.balanceSheetFixedObj;
childObj.getLayout().then(function(data) {
self.data = data;
if (data.qHyperCube.qPivotDataPages[0].qData.length > 0) {
var fixPivotData = data.qHyperCube.qPivotDataPages[0];
self.labels = fixPivotData.qLeft;
$scope.$apply(); // Here is my problem!
$scope.$apply()
で私の見解を公開していている/更新1秒後に
私が$scope.$apply()
を除外した場合は、ビューを公開/更新しますが、10-15秒後には..遅くまで!なぜ私の意見はとても遅いのですか?私は除外したいです$scope.$apply()
を呼び出すサービス機能を作成することでした;' '$ scope($ function(){deferred.resolve(childObj);})'でスコープを変更します。このようにして、ダイジェストサイクルは「非角度」の約束が解決され、ビューが適切に更新されるとトリガされます。 – floribon
@floribon '$ scope'はサービスに存在しません – charlietfl
' childObj.getLayout() 'は' QSocks'約束を返しますか?表示されているサービスは、あなたがしているときに '$ q'を使って' $ apply'を処理する必要があります – charlietfl