Javascript.RU

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

Как правильно передать URL
Здравствуйте! Сразу извиняюсь, только только начал изучать данный фреймворк и хотелось бы сразу делать правильно.

Есть контроллер в котором имеется $http сервис get с запросом на сервер. путь не относительный т.к. рестфул располагается на поддомене.
Причем домен хардкором указать не могу т.к. есть тестовый сервер где соответственно другой домен.

Вообще суть задачи обратится к серверу, и через ng-repeat вывести данные на страницу.

var projectForm = angular.module('project', []);

projectForm.controller('ProjectForm', ['$scope','$http', function($scope, $http) {
    $http.get('***')
}]);


Сам урл формируется на пхп фреймворке.

Просто в том же JQuery можно запихать в data атрибут например data-url="путь к апи".

Как я понимаю в ангуляр можно сделать нечто подобное, но:
1. контроллер не имеет доступа (точней не должен по хорошему) к DOM и нужно использовать директивы
2. директива инкапсулирована и не имеет доступа к контроллеру. И тут нужно сливать области видимости контроллера и директивы.

Я правильно понимаю суть реализации или как-то можно сделать по другому.
п.ы глобальные переменные тоже использовать очень плохо
Ответить с цитированием
  #2 (permalink)  
Старый 12.03.2015, 19:41
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

GibsonG, вот пример связки "директивы повторения" и "данных контроллера"
http://angular.ru/tutorial/step_02

А вот пример работы с http...
http://angular.ru/tutorial/step_05
Ответить с цитированием
  #3 (permalink)  
Старый 12.03.2015, 19:58
Новичок на форуме
Отправить личное сообщение для GibsonG Посмотреть профиль Найти все сообщения от GibsonG
 
Регистрация: 12.03.2015
Сообщений: 5

Возможно или я не увидел что мне нужно, или вы не так меня поняли.

К примеру есть сервис в контроллере взятый из примера на сайте
var phonecatApp = angular.module('phonecatApp', []);
    phonecatApp.controller('PhoneListCtrl', function ($scope, $http) {
    $http.get('phones/phones.json').success(function(data) {
    $scope.phones = data;
    });
    $scope.orderProp = 'age';
    });

здесь мы видим что $http.get() имеет относительный путь. В моем случае путь абсолютрый http://api.domain.ru и сам этот адрес строится при генерации шаблона странице в пхп фреймворке и может быть на тестовом домене один, на продакшине другой. И задача состоит в том чтобы протащить этот адрес.
Вариан который я вижу сделать как-то так
<div data-urlToApi="http://api.domain.ru"></div>

где адрес будет генерироваться с участием php на основе роутов фреймворка.
Ответить с цитированием
  #4 (permalink)  
Старый 13.03.2015, 05:28
Аватар для MetaDriver
Аспирант
Отправить личное сообщение для MetaDriver Посмотреть профиль Найти все сообщения от MetaDriver
 
Регистрация: 24.04.2014
Сообщений: 66

Сообщение от GibsonG Посмотреть сообщение
Здравствуйте! .....

Сам урл формируется на пхп фреймворке.

Просто в том же JQuery можно запихать в data атрибут например data-url="путь к апи".

Как я понимаю в ангуляр можно сделать нечто подобное, но:
1. контроллер не имеет доступа (точней не должен по хорошему) к DOM и нужно использовать директивы
2. директива инкапсулирована и не имеет доступа к контроллеру. И тут нужно сливать области видимости контроллера и директивы.

Я правильно понимаю суть реализации или как-то можно сделать по другому.
п.ы глобальные переменные тоже использовать очень плохо
Решается многими способами. Например так (в одну строчку):
<some-dir  ng-controller='myRestCtrl' ng-init='restBase = <?php echo $restBasePath ?>'>
........
</some-dir>
Ответить с цитированием
  #5 (permalink)  
Старый 13.03.2015, 08:10
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от GibsonG
Вариан который я вижу сделать как-то так
<div data-urlToApi="http://api.domain.ru"></div>
Не факт, что на момент вызова запроса тот ДОМ элемент будет существовать.
Ответить с цитированием
  #6 (permalink)  
Старый 13.03.2015, 08:53
Новичок на форуме
Отправить личное сообщение для GibsonG Посмотреть профиль Найти все сообщения от GibsonG
 
Регистрация: 12.03.2015
Сообщений: 5

Цитата:
Не факт, что на момент вызова запроса тот ДОМ элемент будет существовать.
Ну дело даже не в том. даже если подключать в конце скрипты (дом по идее должен уже построиться) сначала запускается контроллер а после отрабатываются директивы и в контроллере приходит undefined значение.

Как выход сделать так, :

$scope.$watch('restBase', function(val){
        console.log($scope.restUrl);
    });


но насколько это верно т.к. насколько я понимаю от вешает наблюдателя на директивы?


Цитата:
Решается многими способами. Например так (в одну строчку):
А какие способы есть еще?

Последний раз редактировалось GibsonG, 13.03.2015 в 09:01.
Ответить с цитированием
  #7 (permalink)  
Старый 13.03.2015, 15:03
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от GibsonG
Как выход сделать так, :

$scope.$watch('restBase', function(val){
        console.log($scope.restUrl);
    });
Ты не тем занимаешься...

Серверный скрипт, при формировании страницы, может записать любое значение в любое место.
Пиши сразу в нужное тебе место и будет тебе счастие...
Ответить с цитированием
  #8 (permalink)  
Старый 13.03.2015, 21:27
Новичок на форуме
Отправить личное сообщение для GibsonG Посмотреть профиль Найти все сообщения от GibsonG
 
Регистрация: 12.03.2015
Сообщений: 5

это как я тебе на php странице напишу в js файл?
Я же не буду javascript код пихать в представление php.
токен сам то можно из куков достать. а вот с другими параметрами сложне
Ответить с цитированием
  #9 (permalink)  
Старый 13.03.2015, 22:18
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от GibsonG
это как я тебе на php странице напишу в js файл?
Я х/з как там ваш ПХП... Я на CSP могу написать в любое место. Я формирую страницу! Куда хочу - туда и пишу.

Страницу ты формируешь? Можешь создать глобальную js переменную? Вот создай и в конструкторе ее используй.

И не фик меня пугать всякими новомодними словечками...
Ответить с цитированием
  #10 (permalink)  
Старый 14.03.2015, 00:06
Новичок на форуме
Отправить личное сообщение для GibsonG Посмотреть профиль Найти все сообщения от GibsonG
 
Регистрация: 12.03.2015
Сообщений: 5

в общем я тебя понял
но глобальные переменные как раз и следует избегать. Не зря в MVC модель контроллер и представление изолируют. И где ты видел новомодные словечки?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать 2 значения в скрипт? useruser jQuery 1 07.10.2014 11:32
Как правильно обработать ajax запрос ? enot Общие вопросы Javascript 1 19.05.2014 21:16
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
как правильно отслеживать вставку html() bombascter jQuery 15 20.11.2012 09:47
Как правильно прицепить обработку события slowklg Events/DOM/Window 6 15.03.2012 16:20