Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.01.2014, 14:33
Новичок на форуме
Отправить личное сообщение для attary Посмотреть профиль Найти все сообщения от attary
 
Регистрация: 17.01.2014
Сообщений: 6

не отрабатывает $http() при вызове из директивы через click
Добрый день, недавно открыла для себя фрэймворк AngularJS решила сделать простенькую операцию и натолкнулась на проблему:

есть кнопка:

<a href="" id="vdsvdsvdsvd" class="button_submit btn_gray_red" send-user-information-to-server method-from-controller="send_authentication_data_User">Войти</a>


есть директива:

questApp.directive('sendUserInformationToServer', function() {
			return{
				
				scope: {
					methodFromController: '=',
				},

				link: function(scope, elm, attrs, ctrl) {
					var ElementButton = angular.element(elm);
					
					ElementButton.bind('click', call_the_controller_to_request);
						 
					function call_the_controller_to_request(){
						console.log(scope.methodFromController(elm));

					}
						  
				}
			}
		});


создала контроллер:

questApp.controller('AuthController',
	function AuthController($scope, $http){
        $scope.contentQuestions = "Сюда будет подгружаться результат запроса";


        $scope.send_authentication_data_User = function(elem){
         var message = "строка";
			$http({method: 'GET', url: 'static/testFilesJson/question_Auth.json', data:"message=" + message,
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}}).
            success(function(data, status, headers, config) {
            	alert(12);
                $scope.contentQuestions = data;
                /*console.log($scope.contentQuestions.author);*/
               	console.log(data.ResultsForEachField[0].PassData);
            }).
            error(function(data, status, headers, config) {
				alert(22);
				console.log(status);
            });

           
	}

    });


суть проблемы: НЕ отрабатывает сервис $http() при таком вызове.
Он рабоатет если я напрямую вызову метод контроллера из самого элемента через ng-click, он работает и из директивы если я вызову метод контроллера вот так:
angular.$apply(ElementButton.bind('click', call_the_controller_to_request()));
только тогда он отрабатывает при загрузке а не при клике, но категорически не хочет работать в том контексте который я показала. Помогите пожалуйста, мучаюсь второй день уже

Последний раз редактировалось attary, 17.01.2014 в 14:48.
Ответить с цитированием
  #2 (permalink)  
Старый 17.01.2014, 23:16
Аватар для dolpheen
Интересующийся
Отправить личное сообщение для dolpheen Посмотреть профиль Найти все сообщения от dolpheen
 
Регистрация: 04.01.2014
Сообщений: 14

А если позаимствовать из того же ngClick? (для вызова метода необходимо указать контроллер, иначе как определить в какой области видимости его искать?)

<a href="" id="vdsvdsvdsvd" class="button_submit btn_gray_red" send-user-information-to-server ng-controller="AuthController"  method-from-controller="send_authentication_data_User(elem)">Войти</a>


questApp.directive('sendUserInformationToServer', function($parse) {
            return{
                compile: function($element, attr) {
                	var fn = $parse(attr['methodFromController']);
                	return function(scope, element, attr) {
                		element.on('click', function(event) {
                			scope.$apply(function() {
                				fn(scope, {elem:element});
                			});
                		});
                	};
               	}
        	}
        });



http://plnkr.co/edit/oiT5yLhX7RSy1IeQ49Bs?p=preview
Ответить с цитированием
  #3 (permalink)  
Старый 21.01.2014, 18:55
Новичок на форуме
Отправить личное сообщение для attary Посмотреть профиль Найти все сообщения от attary
 
Регистрация: 17.01.2014
Сообщений: 6

из ngClick все работает. Но, если я правильно понимаю суть философии AngularJS то у них не рекомендуется в контроллерах производить никаких манипуляций с DOM и кроме того по их задумке (опять же если я правильно понимаю) директива знает об элементе вызвавшем его, а контроллеру это ни к чему, а мне как раз нужно добиться следующего:

1) через добавление нового атрибута подключить к этому HTML-элементу директиву, затем по клику
2) в директиве произвести необходимые манипуляции с DOM
3) затем сделать Ajax запрос (который я как раз хотела сделать в контроллере)
4) затем результат запроса вернуть в директиву а в ней опять же на основе полученных результатов и запроса, до-завершить манипуляции с DOM.

Ваш пример я попробую реализовать, просто сейчас работаю не с рабочего компьютера где все исходники и выполнение этой задачи пока отложила.
Ответить с цитированием
  #4 (permalink)  
Старый 21.01.2014, 20:46
Аватар для dolpheen
Интересующийся
Отправить личное сообщение для dolpheen Посмотреть профиль Найти все сообщения от dolpheen
 
Регистрация: 04.01.2014
Сообщений: 14

Да, "ангулярщики", рекомендуют манипулировать с DOMом через директивы. А директивы, в свою очередь, имеют мощный инструментарий работы как с областями видимости, так и с внешними сервисами необходимыми для получения отображаемых данных.
Т.е. через директивы мы указываем как отображать, а что отображать уже решают контроллеры(сервисы). Соответственно контроллерам "наплевать", как будут отображаться данные.
В Вашем случае, возможно стоит посмотреть в сторону создания отдельного сервиса, с которыми будет взаимодействовать и контроллер и директива. А promises этого сервиса помогут качественно организовать работу с Ajax и в директиве и в контроллере.
Ответить с цитированием
  #5 (permalink)  
Старый 24.01.2014, 13:57
Новичок на форуме
Отправить личное сообщение для attary Посмотреть профиль Найти все сообщения от attary
 
Регистрация: 17.01.2014
Сообщений: 6

спасибо за совет) я попробую
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При отправке через ajax, в данных появляются мнемоники nikolayseo Общие вопросы Javascript 1 03.02.2012 00:48
Видимость php переменных при обращении к файлу через ajax romzes5000 AJAX и COMET 7 04.10.2011 23:10
установить переменную сессии через ajax при загрузке страницы optik77 AJAX и COMET 3 02.06.2011 17:36
Проблемы с click() (не запускается при клике) hase jQuery 4 13.11.2010 22:25
Не та кодировка при изменении элементов DOM, загружаемых через ajax ShootNik Серверные языки и технологии 16 14.10.2010 09:55