Angular: получил неопределенное значение при назначении новой переменной с переменной $rootScope

Как упоминалось в заголовке, у меня есть небольшая проблема с назначением новой переменной с переменной $rootScope.

У меня есть переменная $rootScope.adulttotTicket со значением 2. значение int. Итак, я хочу просто присвоить новую переменную newVal переменной $rootScope.adulttotTicket.

<p data-ng-init="newVal = $rootScope.adulttotTicket"></p>

но когда я вывожу переменную newVal, в моем браузере ничего не отображается. Итак, я пытаюсь отредактировать в plunker, поэтому я обнаружил, что значение newVal не определено. Я понятия не имею, что здесь делать.

newVal должно легко иметь значение 2 из $rootScope.adulttotTicket. но я ничего не получил. см. этот plunkr plunkr

Надеюсь получить идею от кого-либо. Благодарность !


person Fai Zal Dong    schedule 10.02.2017    source источник
comment
Просто хотел упомянуть, что то, что вы пытаетесь сделать, звучит как плохая идея - как мы все знаем, gobal state — это зло и ng-inits тоже. Не говорю, что нет случаев, когда это необходимо, но в целом это должно быть признаком переосмысления вашего дизайна.   -  person LionC    schedule 10.02.2017
comment
Вы должны использовать controllers, а не ngInit для инициализации значений в области видимости.   -  person lin    schedule 10.02.2017
comment
Он показывает adulttotTicket: 2 newVal: unassigned Я думаю, это то, что вам нужно, верно?   -  person Prasanth Bendra    schedule 10.02.2017
comment
У нас была эта странная ошибка, и единственное, что работает, — это преобразовать переменную в объект. как $rootScope.ticket.adulttotTicket   -  person Ishan Fernando    schedule 02.03.2021


Ответы (2)


Получите доступ к $rootScope в представлении, используя вместо этого $root:

<p data-ng-init="newVal = $root.adulttotTicket"></p>

Я обновил ваш plunkr, и он работает нормально.

person lin    schedule 10.02.2017
comment
все еще не назначено.. предположительно newVal показать значение 2 - person Fai Zal Dong; 10.02.2017
comment
@FaiZalDong Я обновил плункер. Это работает сейчас, но вы не должны делать это так ... - person lin; 10.02.2017
comment
Но мой вопрос состоит в том, чтобы назначить новую переменную $rootScope.adulttotTicket, например: <p data-ng-init="newVal = $rootScope.adulttotTicket"></p>. то, что вы показываете, это то, что вы используете обратно значение $root - person Fai Zal Dong; 14.02.2017
comment
см. этот plunkr [plnkr.co/edit/21mGfltfkkHaOoLaGx3Q?p=preview]. предполагаемое значение nv получить значение $root.newVal @lin - person Fai Zal Dong; 14.02.2017

При обращении к $rootScope в представлении вместо этого используйте $root:

<p data-ng-init="newVal = $root.adulttotTicket"></p>

ОБНОВЛЕНИЕ

Причина, по которой вышеизложенное не работает, заключается в том, что вы не находитесь в области действия и поэтому не имеете $scope доступа к $root из! Чтобы исправить это, вы можете объявить свою переменную на $rootScope в блоке выполнения следующим образом:

angular.module('myModule').
run(function($rootScope) {
    $rootScope.adulttotTicket = 'unassigned';
});

Затем вы можете получить к нему доступ в представлении (без ссылки на $root или $rootScope) следующим образом:

<p data-ng-init="newVal = adulttotTicket"></p>
person Matthew Cawley    schedule 10.02.2017
comment
ребята можно показать в plunkr? Я пробовал, но все равно не работает... [plnkr.co/edit/uw3Uj1HmcK2eJYCUlYWj?p =предварительный просмотр] - person Fai Zal Dong; 10.02.2017
comment
на самом деле я не хочу использовать контроллер, вы можете увидеть мой plunkr - person Fai Zal Dong; 10.02.2017
comment
@FaiZalDong Я не использую контроллер. - person Matthew Cawley; 10.02.2017
comment
Обновил ваш плункер, ни одного контроллера в поле зрения. - person Matthew Cawley; 10.02.2017