Javascript.RU

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

Передать в контроллер значение с сервера при инициализации
У меня в проекте есть страница редактирования сложного объекта object, который состоит из массы под-объектов rows и items. Решил сделать его редактирование на ангуляре, но с толкнулся с тем, что я не понимаю, как передать контроллеру id объекта, который надо показывать для редактирования.

Пытался сделать это при помощи ng-init и ng-model в скрытом инпуте (понимаю, это скорее всего нехорошо), но ни то ни другое не работает.

Кусок серверной вьюхи:
<div ng-controller="EditRowsCtrl" ng-init="objectId=<?= $object->object_id ?>">

	<input type="hidden" ng-model="objectId" value="<?= $object->object_id ?>">

	<div-loader ng-hide="{{isDataLoaded}}"></div-loader>
	<div-error ng-show="{{isDataNotLoaded}}" message="Не удалось загрузить данные."></div-error>

	<p>#{{objectId}}</p>

	<div ng-repeat="row in rows">
		<edit-row-pre row="row"></edit-row-pre>
	</div>

</div>


Контроллер:
msApp.controller("EditRowsCtrl", function($scope, $http){
	$scope.rows = $http.get("/api/v1/object/rows/"+$scope.objectId)
		.success(function(data, status, headers, config){
				$scope.isDataLoaded = true;
		})
		.error(function(data, status, headers, config){
				$scope.isDataLoaded = false;
				$scope.isDataNotLoaded = true;
		});

});


На странице objectId отображается корректно, а в контроллере $scope.objectId значится undefined.
Подскажите пожалуйста, куда смотреть в доках, и как это вообще принято делать в ангуляре ?
Ответить с цитированием
  #2 (permalink)  
Старый 01.03.2014, 22:13
Новичок на форуме
Отправить личное сообщение для entrust Посмотреть профиль Найти все сообщения от entrust
 
Регистрация: 01.03.2014
Сообщений: 3

Я, очевидно, что-то делаю кардинально не так, но у меня упорно не получается передать данные из html в контроллер при помощи двустороннего связывания.

Пример: http://jsfiddle.net/entrust/6LJx3/4/

Объясните пожалуйста, почему данные из ng-init и ng-model не попадают в контроллер ? И, самое главное, как же все же можно передать данные из сгенеренного сервером html в angular-приложение ? Во всех туториалах я вижу максимум разбор урла, $location. Но у меня не одностраничник, у меня роутинг вообще не используется.

Последний раз редактировалось entrust, 02.03.2014 в 07:50.
Ответить с цитированием
  #3 (permalink)  
Старый 02.03.2014, 18:47
Новичок на форуме
Отправить личное сообщение для entrust Посмотреть профиль Найти все сообщения от entrust
 
Регистрация: 01.03.2014
Сообщений: 3

Отвечу сам себе, для тех, кто напорется на такую же проблему (а это каждый второй, имхо). Встроенного решения в ангуляр нету. Передавать значения в контроллер при его инициализации можно, присваивая в html эти значения переменным из неймспейса window и читая их в контроллере - http://jsfiddle.net/entrust/6LJx3/7/

Для тех, кто пишет php, для совершения подобных манипуляций может быть полезным вот этот модуль: https://github.com/laracasts/PHP-Vars-To-Js-Transformer
Ответить с цитированием
  #4 (permalink)  
Старый 12.03.2014, 01:16
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

http://jsfiddle.net/6LJx3/8/

Сообщение от entrust
присваивая в html эти значения переменным из неймспейса
а я и не знал, что в html есть переменные и им можно что-нибудь присваивать
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 21.03.2014, 16:50
Новичок на форуме
Отправить личное сообщение для dleonid Посмотреть профиль Найти все сообщения от dleonid
 
Регистрация: 21.03.2014
Сообщений: 1

Дело, видимо, в том, что сперва инициализируются переменные в контроллере, а уже потом в директивах.
Можно сделать обертку .$watch и все сработает. Например так:
http://plnkr.co/edit/q6XAyx7WjEJfY3WCpfsA
Ответить с цитированием
  #6 (permalink)  
Старый 29.04.2014, 22:48
Интересующийся
Отправить личное сообщение для Ruzarh Посмотреть профиль Найти все сообщения от Ruzarh
 
Регистрация: 01.05.2011
Сообщений: 22

Есть способы. Просто они напрямую не документированны.
angular.module('app', [])

    .controller('ctrl', ['$scope', 'superData', function($scope, superData) {
        console.log(superData);
    }]);

angular.element(document).ready(function () {

    angular.module('app').value({'superData':'superInfo'});

    angular.bootstrap(document.html, ['app']);
});
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать значение переменной с ява на php wadim Общие вопросы Javascript 1 05.02.2014 23:19
Как передать значение переменной? maksbp22 Общие вопросы Javascript 0 11.10.2013 16:21
Передать значение этой переменной скрипту пхп не обновляя страницы jei Общие вопросы Javascript 10 01.03.2013 17:14
Как передать значение по ссылке на другую страницу сайта Rollo Общие вопросы Javascript 7 18.10.2010 15:02
30(1|2) редирект от сервера. Или как лучше сделать редирект при верной отсылке форма. pizzZ AJAX и COMET 2 18.02.2010 09:06