Преобразование jQuery post с функциями обратного вызова в angular $http

#javascript #jquery #angularjs

#javascript #jquery #angularjs

Вопрос:

У меня есть контроллер angular, который имеет функцию, которая добавляет html, полученный в post, в контейнер. Затем я могу щелкнуть по div внутри, который устанавливает результат var для некоторых данных onclick.

 <div onclick="var result = {"some":"data", "right":"here"}...
  

Проблема, с которой я сталкиваюсь, заключается в сохранении функциональности функций обратного вызова. Это то, что я пытаюсь преобразовать.

 jQuery.post(url, {
                'callback': "callbackFunctions.setData(result);callbackFunctions.closeDialog();",
                'return_type' : 'json'
            },
            function (json) {
                if (json.success) {
                    jQuery('#template').html(json.message);
                }
            }, 'json');
  

Этот фрагмент в настоящее время использует внешний набор функций от контроллера angular.

 var callbackFunctions = {
    closeDialog: function () {
        angular.element('#template').dialog('close');
    },

    SetData: function (result) {
        var scope = angular.element('.variables img:visible').scope().$parent;

        scope.$apply(function(){
            jQuery.extend(true, scope.variables, {
                url: result.url,
                name: result.name,
                thumbnail: result.thumbnail,
                value: result.url
            });
        });
    }
};
  

Я просто не думаю, что это самое чистое решение. В настоящее время это работает, я просто не могу преобразовать это в запрос angular $ http и заставить функции обратного вызова работать. В идеале это было бы $ http.post и при вызове функций они должны находиться внутри контроллера, поэтому у меня уже есть доступ к области видимости.

Одна ошибка, я не могу изменить http, который я запрашиваю, используется во множестве других областей сайта, которые еще не обновлены.

Комментарии:

1. $http.post(url, data).then(sucessCallback, errorCallback)

2. docs.angularjs.org/api/ng/service /$http#сообщение

3. Я знаю, как поместить HTML-код в контейнер. Как мне добавить функции, которые мне нужно запускать при нажатии на элемент в этом контейнере. Обратите внимание на обратный вызов: функции, которые у меня есть для данных jQuery, — это та часть, которую я не могу заставить работать.

Ответ №1:

Контроллер

 $http.post(url, data).then(function(response){
    $scope.message = response.message;
}, function(error){
    console.log("Error detected : "   error);
})
  

HTML

 <div id="template">
    {{message}}
</div>
  

Я действительно не знаю, что вы хотите сделать с данными API, но вы можете использовать ng-bind или {{variable}} внутри вашего html для их отображения

Комментарии:

1. Ответ. данные — это html, который будет вставлен в контейнер div, давайте назовем его #template. Проблема не в том, что html не попадает в контейнер. При выборе элемента в #template запускаются пользовательские функции. Элемент внутри контейнера задает результат var. Мне нужны данные из результата. Затем мне нужно закрыть контейнер после выбора элемента. Для этого и предназначены две внешние функции. Мне нужны эти функции для запуска, и я не знаю, как добиться этого, работая с $ http похоже, мне нужно каким-то образом передать функции и запустить их?

2. Можете ли вы добавить HTML-код к вашему вопросу, пожалуйста? Я не понимаю, чего вы хотите