我是一个角色的总菜鸟,但我想了解如何做以下事情。
我正在使用keycloak和keycloak.js(https://docs.jboss.org/keycloak/docs/1.1.0.Final/userguide/html/ch08.html)并且他们有自己的自定义回调,例如onAuthSuccess。如果我想更新类似登录名的内容,应该如何调用onAuthSuccess。我应该创建一个超出角度的函数,并调用范围,这看起来很混乱。或者有没有办法以角度调用此函数,如提供者或工厂,但我不知道如何做到这一点。
更新********
在普通的javascript中你会有类似的东西
var keycloak = new Keycloak("path/to/keycloak.json");
keycloak.onAuthSuccess(){
//code to do on auth success
}
为了更新我的范围内的内容,我必须做类似
的事情var scope = angular.element($("#outer")).scope();
但似乎很乱。
有没有办法在我的项目中执行此操作。
答案 0 :(得分:1)
您可能想要拨打$apply()
$ apply()用于从外部执行角度表达式 角度框架。 (例如,来自浏览器DOM事件, setTimeout,XHR或第三方库)。因为我们正在呼唤 我们需要执行适当范围生命周期的角度框架 exception handling,executing watches。
我不熟悉这个库,但是根据你分享的内容,一个例子可能包括......
var keycloak = new Keycloak("path/to/keycloak.json");
keycloak.onAuthSuccess(){
// do stuff - likely modify $scope
$scope.$apply();
}
查看AngularJS $apply() docs以及更多explanation on the project wiki,了解原因。
答案 1 :(得分:0)
对我有用的是让AngularJs代码处理事件以响应其他代码。这似乎是各种邪恶中的较小者,因为它让我在控制器中写出我想要的角度代码。但它并不理想,因为它在角度控制器中引入了外部依赖。
扩展你的例子:
keycloak.onAuthSuccess(){
//raise some sort of event that angular controller can listen for
}
一些潜在的事件类型:
$('#outer').trigger('authSuccess.tellAngular', args);
angular.element($("#outer")).scope().broadcast('authSuccess', args);
我希望有所帮助!