Как вставить элемент QlikSense в HTML с помощью angularjs - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь вставить какой-то элемент, созданный в Qlik Sense, в приложение mashup, используя angularjs.У меня есть служба для получения объекта из Qlik Sense.Смысл отправить мне обещание.Но эти обещания я не знаю, как вставить в HTML-код.

Это мой код

define([
'js/qlik',
'app'
], function(qlik, app) {

let prefix = window.location.pathname.substr(0, window.location.pathname.toLowerCase().lastIndexOf("/extensions") + 1);
let config = {
    host: window.location.hostname,
    prefix: prefix,
    port: window.location.port,
    isSecure: window.location.protocol === "https:"
};

app.service('cube', function() {
    const appSense = qlik.openApp('data.qvf', config);


    this.getElement = function(id) {
        return appSense.getObject('filter-div', 'ABFqkb');
    };
}
});

и это мой контроллер:

define([
'app',
], function(app) {
app.controller('controller', function($scope, cube) {

    cube.getElement().then(function(data) {
        console.log(data);
    });
    // create a message to display in our view
});
});

мой взгляд это что-товот так

<div ng-controller="datos-generales">
    <div id='filtro-datos'></div>
</div>

кто-нибудь может помочь мне вставить этот элемент?

1 Ответ

0 голосов
/ 23 мая 2018

Используйте $ q.when , чтобы преобразовать обещание ES6 в обещание AngularJS:

app.controller('controller', function($scope, $q, cube) {

    var promise=$q.when(cube.getElement())

    promise.then(function(data) {
        $scope.data = data; 
        console.log(data);
    });

});

HTML

<div ng-controller="datos-generales">
    <div id='filtro-datos'>
        {{data}}
    </div>
</div>

$ q.when оборачивает объектэто может быть значение или обещание (от третьей стороны) в обещании $ q.Это полезно, когда вы имеете дело с объектом, который может или не может быть обещанием, или если обещание исходит из источника, которому нельзя доверять.

AngularJS изменяет обычный поток JavaScript, предоставляя свой собственныйцикл обработки событий.Это разбивает JavaScript на классический и AngularJS контекст выполнения.Только операции, которые применяются в контексте выполнения AngularJS, выиграют от привязки данных AngularJS, обработки исключений, наблюдения за свойствами и т. Д.


Обновление

Альтернативно, преобразуйте обещание ES6 вservice:

app.service('cube', function($q) {
    const appSense = qlik.openApp('data.qvf', config);    
    this.getElement = function(id) {
        var es6promise = appSense.getObject('filter-div', 'ABFqkb');
        return $q.when(es6promise);
    };
}
app.controller('controller', function($scope, ̶$̶q̶,̶ cube) {

    cube.getElement()
      .then(function(data) {
        $scope.data = data; 
        console.log(data);
    });

});

Таким образом, контроллеры не должны выполнять преобразование.

...