【发布时间】:2013-07-02 15:05:05
【问题描述】:
我正在尝试构建一个简单的用户名登录系统。这只是为了记录我可以在我的各种控制器中使用的用户名。
但是,由于某种原因,我无法在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-bootstrap modal(popup) 并要求用户输入他们的用户名。
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 会发生什么?您可能需要将 Session 资源附加到您的 abcController $scope。
-
你可能会觉得这篇文章很有趣blog.jdriven.com/2013/03/…
-
@cirrus,你是对的。这就是可能发生的事情。我在 app.js 中写了
app.run(function(Session) {}); //bootstrap session;,它在任何其他 .js 文件之前被引用。那没有帮助。我不是已经将 Session 资源附加到 abcController 了吗?请帮忙,angularJS noob在这里。 -
您也可以使用 $rootScope 但我认为您的资源方法要好得多。
标签: javascript twitter-bootstrap angularjs