使用来自其他库的事件更新角度的内容

时间:2015-06-11 21:13:26

标签: javascript angularjs angularjs-scope

我是一个角色的总菜鸟,但我想了解如何做以下事情。

我正在使用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();

但似乎很乱。

有没有办法在我的项目中执行此操作。

2 个答案:

答案 0 :(得分:1)

您可能想要拨打$apply()

  

$ apply()用于从外部执行角度表达式   角度框架。 (例如,来自浏览器DOM事件,   setTimeout,XHR或第三方库)。因为我们正在呼唤   我们需要执行适当范围生命周期的角度框架   exception handlingexecuting 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
}

一些潜在的事件类型:

  1. DOM事件,例如$('#outer').trigger('authSuccess.tellAngular', args);
  2. AngularJs广播,例如angular.element($("#outer")).scope().broadcast('authSuccess', args);
  3. 我希望有所帮助!

相关问题