Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.12.2014, 08:53
Интересующийся
Отправить личное сообщение для arkada38 Посмотреть профиль Найти все сообщения от arkada38
 
Регистрация: 09.10.2012
Сообщений: 23

Изменить значение переменной в scope вне angular
Angular приложение начинается с body.
<body ng-app="MyApp" ng-controller="Tabs">

Есть переменная nav.
function Tabs($scope,$anchorScroll) {
	$scope.$parent.nav='1'
}

Возникла необходимость, чтобы в мобильном приложении при нажатии кнопки меню изменялось значение переменной nav. При нажатии кнопки выполняется функция onMenuKeyDown(), но как ей передать scope?
Пробовал следующее, но это не работает.
function onMenuKeyDown(){
	angular.element('body').scope().nav = 0;
}
Ответить с цитированием
  #2 (permalink)  
Старый 24.12.2014, 10:32
Аватар для Tek
Tek Tek вне форума
Профессор
Отправить личное сообщение для Tek Посмотреть профиль Найти все сообщения от Tek
 
Регистрация: 22.02.2012
Сообщений: 212

angular.element('body').scope().nav = 0;
нужно обернуть в
scope.$apply(function () {});
Ответить с цитированием
  #3 (permalink)  
Старый 24.12.2014, 10:42
Интересующийся
Отправить личное сообщение для arkada38 Посмотреть профиль Найти все сообщения от arkada38
 
Регистрация: 09.10.2012
Сообщений: 23

Сообщение от Tek Посмотреть сообщение
angular.element('body').scope().nav = 0;
нужно обернуть в
scope.$apply(function () {});
А подробнее? Пишет scope не определен.
scope.$apply(function onMenuKeyDown(){

});
Ответить с цитированием
  #4 (permalink)  
Старый 24.12.2014, 11:03
Новичок на форуме
Отправить личное сообщение для zorya Посмотреть профиль Найти все сообщения от zorya
 
Регистрация: 30.08.2012
Сообщений: 4

Ну по сути так и обращайся
$scope.$parent.nav=0;
Ответить с цитированием
  #5 (permalink)  
Старый 24.12.2014, 11:58
Интересующийся
Отправить личное сообщение для arkada38 Посмотреть профиль Найти все сообщения от arkada38
 
Регистрация: 09.10.2012
Сообщений: 23

$scope.$parent.nav=0;

Так работает если функция понимает где scope. У меня же функция вызывается из голого JS. Как ей изменить переменную в scope из чистого JS?
Я нашел как прочитать значение переменной. Если в контролере прописать
navka=$scope.$parent.nav

то значение navka видно всем функциям. Но мне нужно изменить значение переменной $scope.$parent.nav. Нашел ID $scope.$parent = 04I.
Ответить с цитированием
  #6 (permalink)  
Старый 24.12.2014, 12:34
Аватар для Tek
Tek Tek вне форума
Профессор
Отправить личное сообщение для Tek Посмотреть профиль Найти все сообщения от Tek
 
Регистрация: 22.02.2012
Сообщений: 212

arkada38,
Если изменить значение вне тела ангуляра то view не измениться, для этого существует методы $apply и $digest поподробнее почитать можно например тут , вам нужно
1) найти скоуп
2) найти в скоупе что вы хотите помнять
3) изменение произвести внутри $apply

Пример:
var scope = angular.element('body').scope();
scope.$apply(function () {
     scope.message = "Timeout called!";
});
Ответить с цитированием
  #7 (permalink)  
Старый 24.12.2014, 15:04
Интересующийся
Отправить личное сообщение для arkada38 Посмотреть профиль Найти все сообщения от arkada38
 
Регистрация: 09.10.2012
Сообщений: 23

Я создал функцию в контроллере
$scope.menubutton = function() {
		$scope.$apply(function(){
			$scope.$parent.active = 'Настройки';
			console.log($scope.$parent.active);
		});
	};
navka=$scope;

Там же присвоил переменной navka $scope. Затем при нажатии кнопки запускается код
navka.menubutton.apply();

Данная функция успешно выполняется. Имя переменной переписывается. Но на самой странице ничего не меняется. У меня есть вкладки, при нажатии на вкладку $scope.$parent.active присваивается название этой вкладки. Через ng-show показывается нужный блок. При клике на вкладку все работает, а при вызове функции по клику на кнопку изменяется только переменная scope. И $scope.$apply используется. Почему не работает?
Ответить с цитированием
  #8 (permalink)  
Старый 24.12.2014, 16:29
Аватар для Tek
Tek Tek вне форума
Профессор
Отправить личное сообщение для Tek Посмотреть профиль Найти все сообщения от Tek
 
Регистрация: 22.02.2012
Сообщений: 212

http://jsfiddle.net/8pysxvdc/7/.....
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменить значение переменной в onSelect kazankoff Events/DOM/Window 8 02.10.2013 10:19
Выводить значение раньше переменных Гробовщик Общие вопросы Javascript 11 10.09.2013 08:42
В contains() не подставляется значение переменной Heger jQuery 2 11.12.2011 20:26
Значение переменной salex009 jQuery 1 05.12.2011 16:55
Изменить значение переменной функции через select Fenec Элементы интерфейса 5 13.08.2010 15:32