我想構建一個簡單的用戶名登錄系統。這只是爲了記錄我可以在我的各種控制器中使用的用戶名。爲什麼在控制器間共享數據在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;
});
只要用戶點擊登錄按鈕Twitter的引導模式(彈出)將出現,並詢問用戶輸入他們的用戶名。
的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 ===在abcController中未定義。如果您在需要時直接使用Session.data.username會發生什麼情況?您可能需要將會話資源附加到您的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中。這沒有幫助。我沒有將Session資源附加到abcController嗎?請幫助,angularJS noob在這裏。 – Watt