我知道这很长,但在更复杂的情况下我正在做的事情似乎是导致问题的具体原因。我尝试的所有简单示例都可以正常工作。
我有一个使用 angularjs 和 laravel 四的应用程序设置。
主页通过 laravel 路由渲染:
Route::get('/', function() {
return View::make('app');
});
app.php 返回具有以下结构的网站骨架:
<!doctype html>
<html lang="en" ng-app="app">
<head>
<script src="/js/angular.js"></script>
<script src="/js/angular-sanitize.js"></script>
<script src="/js/angular-ui-router.js"></script>
<script src="/js/app.js"></script>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top" ng-controller="NavController">
<div class="navbar-inner">
<div class="container-fluid">
<button class="button pull-right" ng-click="logout()">Logout</button>
<p class="navbar-text pull-right" >
Logged in as <a href="#" class="navbar-link">{{ currentUser.email }} id is : {{ currentUser.userId }}</a>
</p>
</div>
</div>
</div>
</div>
<div class="row-fluid offset05">
<div id="view" ng-view></div>
</div>
</div>
</body>
</html>
app.js 的基础知识:
var app = angular.module("app", ['ngSanitize','ui.state','ui.bootstrap']);
用户最初被路由到登录模板,此时 LoginController 更新驻留在 UserService 中的用户信息。
app.controller("LoginController", function($scope,$rootScope, $location, AuthenticationService, UserService) {
$scope.credentials = { email: "", password: "" };
$scope.login = function() {
AuthenticationService.login($scope.credentials).success(function() {
$location.path('/home');
});
};
});
Authentication Service 适当地更新 UserService 变量:
app.factory("AuthenticationService", function($rootScope, $http, $sanitize, SessionService, FlashService, CSRF_TOKEN, UserService) {
return {
login: function(credentials) {
var login = $http.post("/auth/login", sanitizeCredentials(credentials));
login.success(function(data){
UserService.currentUser = data.user;
});
return login;
}
});
NavController(上面看到的导航栏控制器)将其范围绑定到 UserService.currentUser。
app.controller("NavController",function($scope, UserService, AuthenticationService,$location){
$scope.currentUser = UserService.getCurrentUser();
});
UserService 的相关部分:
app.factory("UserService", function($http){
var _currentUser = {}
return{
currentUser: _currentUser,
getCurrentUser: function() {
return _currentUser;}
};
});
当用户登录时,他们的用户电子邮件和用户 ID 应该出现在导航栏中。
如果我创建一个严格使用 javascript/html 的示例,则绑定没有问题。
使用上面提到的机制/结构,导航栏在重新加载整个页面之前不会响应 UserService 当前用户变量的变化。
用户登录后,我可以验证 UserController 和 UserService 是否都适当地更新了 currentUser。尽管如此,除非我重新加载整个页面,否则 NavController 不会反映更新的用户。
我认为这是因为 NavController 现在正在使用更新的信息重新运行,但为什么正常绑定不起作用?
我想这与导航栏是通过 php 加载的事实有关。
我的问题是我怎样才能:a)通过服务进行绑定或b)在必要时重新加载NavController(登录/注销后)