간단한 사용자 이름 로그인 시스템을 구축하려고합니다. 이것은 내 다양한 컨트롤러에서 사용할 수있는 사용자 이름을 기록하기위한 것입니다.AngularJS에서 컨트롤러를 통한 데이터 공유가 작동하지 않는 이유
는하지만, 어떤 이유로, 나는 abcController
이 문제의 본질은 컨트롤러를 통해 데이터를 공유에 $scope.userName
값을 얻을 수 없습니다입니다.
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>
내가 위에서 할 노력하고 무엇을 할 수있는 더 좋은 방법이 있다면, 제안 주시기 바랍니다.
가이되지 않습니다 jsfiddle
에서 전체 코드 예제는 app.js
controller.js 당신의 userNameController 세트 userName 속성? 아마도 $ scope.userName === abcController에서 정의되지 않았습니다. Session.data.username을 필요할 때 직접 사용하면 어떻게됩니까? Session 리소스를 abcController $ scope에 연결해야 할 수도 있습니다. – 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; 다른 .js 파일보다 먼저 참조되는 app.js에 있습니다. 그건 도움이되지 않았어. abcController에 이미 Session 리소스를 첨부하지 않았습니까? 도와주세요, 각도 요. 여기 멍청한 놈. – Watt