Изменить значение переменной в 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; } |
angular.element('body').scope().nav = 0;нужно обернуть в scope.$apply(function () {}); |
Цитата:
scope.$apply(function onMenuKeyDown(){ }); |
Ну по сути так и обращайся
$scope.$parent.nav=0; |
$scope.$parent.nav=0; Так работает если функция понимает где scope. У меня же функция вызывается из голого JS. Как ей изменить переменную в scope из чистого JS? Я нашел как прочитать значение переменной. Если в контролере прописать navka=$scope.$parent.nav то значение navka видно всем функциям. Но мне нужно изменить значение переменной $scope.$parent.nav. Нашел ID $scope.$parent = 04I. |
arkada38,
Если изменить значение вне тела ангуляра то view не измениться, для этого существует методы $apply и $digest поподробнее почитать можно например тут , вам нужно 1) найти скоуп 2) найти в скоупе что вы хотите помнять 3) изменение произвести внутри $apply Пример: var scope = angular.element('body').scope(); scope.$apply(function () { scope.message = "Timeout called!"; }); |
Я создал функцию в контроллере
$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 используется. Почему не работает? |
|
Часовой пояс GMT +3, время: 16:25. |