我是Angular JS开发的新手,我正在尝试将以下身份验证模块https://github.com/witoldsz/angular-http-auth(http://www.espeo.pl/2012/02/26/authentication-in-angularjs-application的更多信息)实现到我的项目中。
该模块被认为允许以下场景:
做这样的事情的解决方案是:
服务器端行为:
对于每个/ resources / *呼叫,如果用户未被授权,则响应401状态。否则,当用户被授权或不是/ resources / *请求时,请发送客户端要求的内容。
客户端行为:
我的项目是基本的,它使用$ route服务。当我尝试添加捕获事件的指令时:
脚本/指令/登录-directive.js
angular.module('myApp', ['http-auth-interceptor','content-mocks'])
/**
* This directive will find itself inside HTML as a class,
* It is responsible for showing/hiding login form.
*/
.directive('authDirective', function() {
return {
restrict: 'C',
link: function(scope, elem, attrs) {
var login = elem.find('#login');
var main = elem.find('#main');
login.hide();
main.show();
scope.$on('event:auth-loginRequired', function() {
login.show();
main.hide();
});
scope.$on('event:auth-loginConfirmed', function() {
main.show();
login.hide();
});
}
}
});
到我的index.html:
<body ng-app='myApp' class='auth-directive'>
<!--[if lt IE 7]>
<p class="chromeframe">You are using an outdated browser. <a href="http://browsehappy.com/">Upgrade your browser today</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to better experience this site.</p>
<![endif]-->
<!--[if lt IE 9]>
<script src="components/es5-shim/es5-shim.js"></script>
<script src="components/json3/lib/json3.min.js"></script>
<![endif]-->
<div id="login" name="login">
<p>login</p>
</div>
<div id="main" name="main">
<p>main</p>
<div class="container" ng-view></div>
</div>
<script src="components/angular/angular.js"></script>
<script src="components/angular-resource/angular-resource.js"></script>
<script src="components/angular-cookies/angular-cookies.js"></script>
<script src="components/angular-sanitize/angular-sanitize.js"></script>
<script src="components/angular-http-auth/angular-mocks-1.0.1.js" type="text/javascript"></script>
<script src="components/angular-http-auth/http-auth-interceptor.js" type="text/javascript"></script>
<script src="scripts/app.js"></script>
<script src="scripts/controllers/main.js"></script>
<script src="scripts/directives/login-directive.js"></script>
<script src="scripts/mocks/content-mocks.js" type="text/javascript"></script>
</body>
指令ngView不再起作用。控制台日志中没有任何内容。两个指令之间是否存在任何不兼容性?
答案 0 :(得分:2)
通过查看您的登录指令文件,您似乎通过将依赖项数组作为第二个参数传递给angular.module
调用来(不正确地)重新初始化您的Angular应用程序:
angular.module('myApp', ['http-auth-interceptor','content-mocks'])
当app初始化时(可能在app.js中),依赖关系应该只定义一次,当你想在另一个文件中引用你的应用程序时,你应该调用angular.module而没有第二个参数:
angular.module('myApp')
.directive('authDirective', function() { ...