angular 1.5应用程序中的导航栏
Navigation bar in angular 1.5 app
你好,我正在学习Angular,我正在尝试在所有Angular(1.5)应用程序中创建一个全局导航栏。因此,为了实现导航栏,我创建了一个指令
navigation.html
<nav class="navbar navbar-default" id="header">
...
non important tags
...
<li ng-if="!session.logged"><a href="#/login">Enter</a></li>
<li ng-if="session.logged"><a ng-click="logout()">Logout</a></li>
</nav>
navigation.js
export default function navigation(Auth, Session) {
return {
restrict: "E",
replace: true,
scope: {},
templateUrl: directivesPath + "navigation.html",
link: function(scope, element, attrs) {
scope.session = Session.sessionData();
scope.logout = function() {
Auth.logout();
scope.session = Session.sessionData();
window.location = "#/";
}
}
}
}
我把than指令放在一个像这样的index.html中
<!DOCTYPE html>
<html lang="es" ng-app="movieApp">
<head>
...
</head>
<body>
<navigation></navigation>
<div ui-view></div>
</body>
</html>
我有控制器,例如这两个
UsersCtrl.$inject = ["$scope", "$http", "Session"];
export function UsersCtrl($scope, $http, Session) {
$http.get('http://localhost:3000/users').success(function (data) {
console.log(data);
$scope.users = data.data;
$scope.session= Session.sessionData();
});
}
export default angular.module('movieControllers').controller("LoginCtrl", ["$scope", "$rootScope", "Auth", "Session",
function($scope, $rootScope, Auth, Session) {
console.log("User is logged? " + Auth.loggedIn());
if (Auth.loggedIn() === true) {
window.location = "#/users/" + Auth.currentUser.username;
}
const button = document.getElementById('login');
button.addEventListener("click", function() {
const username = document.login.username.value;
const password = document.login.password.value;
Auth.login({username: username, password: password}, function() {
$scope.session= Session.sessionData();
window.location = "#/users/" + username;
// $scope.$digest();
});
});
}]);
Auth
和Session
服务只是对后端进行调用,保留用户数据并检索该用户数据。
问题是,当我登录时,应用程序重定向到用户的节目,但导航仍显示<li>Enter</li>
,但如果我刷新浏览器,导航显示CCD_ 4和CCD_。
如果我将导航指令放入控制器的模板中行为正确。
我做错了什么?
(对不起我的英语,我还在学英语)
您的指令不监视session
的更改。当您在链接函数中分配session
对象时,您可以将其封装在$apply
调用中,以通知更改,例如:
function navigation(Auth, Session) {
return {
restrict: "E",
replace: true,
scope: {},
templateUrl: directivesPath + "navigation.html",
link: function(scope, element, attrs) {
scope.$apply(function() {
scope.session = Session.sessionData();
});
scope.logout = function() {
Auth.logout();
scope.$apply(function() {
scope.session = Session.sessionData();
});
window.location = "#/";
}
}
}
}
更好的是,看看指令中的隔离作用域是如何工作的(https://docs.angularjs.org/guide/directive)并检查$watch功能。
相关文章:
- angular 1.5应用程序中的导航栏
- iPhone应用程序jquery中的滑块导航菜单
- asp.net应用程序活动类中的Twitter引导程序导航
- winjs应用程序中的导航问题
- iOS版离线Jquery Mobile应用程序中处理导航的正确方法
- 是什么处理Hello,Lungo应用程序中的导航
- 在单页应用程序中使用敲除绑定进行id导航
- 导航2-3次后应用程序滞后
- 单独的导航栏 Ctrl 用于单页应用程序
- iPhone设备黑色屏幕在我的jQuery手机Gap应用程序导航中闪烁
- 通过三星智能电视应用程序中的遥控器导航
- 如何在单击按钮时将桌面应用程序导航到系统中设置的默认邮件提供程序
- Angular SPA应用程序使其他URL仍然具有基于URL编号的突出显示导航栏部分
- 向上/向下滚动时向上/向下滑动导航栏和底部工具栏(如Pinterest应用程序)
- 网站中的单页体系结构或应用程序在 html 导航中使用 servlet 而不打开新页面
- 如何在移动应用程序中导航而无需重新加载所有资源
- Windows 8应用程序中的按钮导航
- 类似于后退按钮流的应用程序,导航栏中有后退按钮
- Win Phone 8应用程序加载上的页面导航
- 如何在Aurelia入门应用程序(导航应用程序)中使用JQuery UI组件