Я пытаюсь создать простую систему входа имени пользователя. Это просто запись имени пользователя, которое я могу использовать в разных контроллерах.Почему обмен данными между контроллерами не работает в AngularJS
Но, по некоторым причинам, я не могу получить $scope.userName
значение в abcController
Суть этой проблемы обмена данными между контроллерами.
controller.js
app.controller('userNameController',function ($scope, $log, Config, Session)
{
Session.updateSession($scope.userName);
});
app.controller('abcController',function ($scope, $log, Config, Session)
{
$scope.userName=Session.data.username;
//some other code
});
resource.js
app.factory('Session', function() {
var Session = {
data: {},
updateSession: function(userName) {
Session.data = { "username": userName }
}
};
return Session;
});
Как только пользователь нажимает на кнопку Войти щебетать-самозагрузки модальной (всплывающее окно) будет появляться и спрашивать пользователя для ввода имени пользователя.
index.html
<div ng-controller="userNameController">
<button class="btn" id="enterUsernameBtn" href="#userNameModal" role="button" class="btn" data-toggle="modal" title="Enter Username">Login</button>
</div>
<!-- UserName Modal -->
<div id="userNameModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="userNameModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="userNameModalLabel">Enter your username</h3>
</div>
<div class="modal-body">
<p><b>UserId</b></p>
<div class="input-append">
<input class="pull-left" id="userIdTextBox" type="text" style="left:8px; width:160px" ng-controller="userNameController" ng-model="userName">
</div>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Submit</button>
</div>
</div>
Пожалуйста, не стесняйтесь предложить, если есть лучший способ сделать то, что я пытаюсь сделать выше.
Является ли это потому, что ваш abcController уже бежать к тому времени ваши наборы userNameController свойство userName? Предположительно $ scope.userName === undefined в abcController. Что произойдет, если вы используете Session.data.username напрямую, когда вам это нужно? Возможно, вам потребуется подключить ресурс сеанса к вашей области аббревиатуры abcController. – cirrus
вы можете найти эту статью интересной http://blog.jdriven.com/2013/03/how-to-create-singleton-angularjs-services-in-4-different-ways/ – vittore
@cirrus, вы правы. Это то, что может произойти. Я написал 'app.run (function (Session) {}); // bootstrap session; 'в app.js, на который ссылаются перед любыми другими .js-файлами. Это не помогло. Разве я не привязал ресурс сеанса к abcController? Пожалуйста, помогите, angularJS noob здесь. – Watt