我在网站上有一个带有登录屏幕和小部件的应用程序,显示用户在网站中最喜欢的项目。
在网站 html
<header data-ng-controller="SideBarController">
<section id="sidebar">
<div sidebar-user-info></div>
<div sidebar-my-favorites-list></div>
<p class="full"><a href="#/logout">logout</a></p>
</section>
</header>
内联模板块
<script id="sideBarFavoritesList_template" type="text/ng-template">
<ul id="my-favorites" class="full no-bullets">
<li data-ng-repeat="fav in myFavorites">
<a href="#" id="{{fav.id}}"><img ng-src="/gfx/apps/icons{{ fav.icon }}" width="36" height="36" alt="{{ fav.name }} icoon" class="favicon">{{ fav.name }}</a>
</li>
</ul>
</script>
然后我得到了一个渲染小部件的指令
App.directive('sidebarMyFavoritesList', ['$rootScope', function sideBarMyfavoritesList($rootScope) {
return {
template: $('#sideBarFavoritesList_template').html(),
restrict: 'A',
replace: true
};
}]);
环绕整个侧边栏的控制器
function SideBarController($http, $scope, $rootScope, helper, UserService)
{
$rootScope.user = UserService.data;
$rootScope.loggedIn = UserService.isLogged;
$scope.toggleBar = function toggleBar() {
if (!UserService.isLogged) {
return;
}
$rootScope.state.appbar = !$rootScope.state.appbar;
};
var serviceUrl = "/api/favorites/user";
$http.get(serviceUrl).success(function(d) {
$scope.myFavorites = d.data;
});
}
现在,UserService
当用户登录时更新,但侧边栏始终存在。我想要的是侧边栏会自行刷新并呈现用户的收藏夹。
它适用于用户信息,因为我发现自己为此使用了 rootScope,在用户成功登录后,我更新了 rootScope 上的用户对象。但这感觉很hacky。
我看到它的方式,在用户登录后,我将不得不重做对该服务的 ajax 调用,但我不知道应该在哪里完成。
如果我在登录后刷新页面,它会立即工作,因为用户会话在初始页面加载开始时在服务器端可用。