我正在使用Auth0 Lock来验证用户身份,并且尝试使Lock小部件不是弹出窗口而是嵌入页面本身。
我尝试使用该container
选项,并lock.show()
从要加载的页面中的脚本中调用该方法,但实际上并没有。只有当我lock.show()
从函数内部调用方法时,ng-click
它才会显示小部件。
初始化锁小部件:
lockProvider.init({
clientID: 'XXX',
domain: 'YYY.auth0.com',
options: {
allowSignUp: false,
container: 'hiw-login-container',
auth: {
responseType: 'token',
params: {
scope: 'openid email'
}
},
allowedConnections: ['Username-Password-Authentication']
}
});
风景:
<div ng-if="!isAuthenticated" >
<script>
lock.show();
</script>
<md-content>
<div id="hiw-login-container" style="width: 320px; margin: 40px auto; padding: 10px; border-style: dashed; border-width: 1px; box-sizing: border-box;">
embedded area
</div>
</md-content>
</div>
调用lock.show
来自ng-click
:
<md-button class="md-warn md-raised"
aria-label="Login"
ng-click="toolbar.authService.login()"
ng-if="!isAuthenticated">
Login
</md-button>
function login() {
lock.show();
}
我无法上传图片,因此以下是运行该应用程序时显示的结果链接:
为什么它从一开始就不显示小部件?
您使用的是Angular,因此任何依赖于其渲染管道的Javascript代码,因为它使用由Angular本身管理的HTML元素,都需要遵循这些规则。
当您从ng-click
Angular调用它时,它已经完成了它的工作,并且Lock将正确找到目标元素并正确显示。
当您尝试lock.show
从内联脚本进行调用时,不能保证Angular已经完成处理,并且一切都将无法进行。
您需要lock.show
从支持Angular的代码中调用;您可以考虑以下几点:
function YourController($scope) {
$scope.$on('$viewContentLoaded', lock.show);
}
或者
angular.element(lock.show);
甚至考虑考虑了解Angular何时提供HTML元素并进行调用的指令lock.show
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句