#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-код к вашему вопросу, пожалуйста? Я не понимаю, чего вы хотите