更新事件的角度范围

时间:2016-05-10 01:52:05

标签: javascript angularjs angularjs-service angular-digest

我正在将Web服务客户端包装到角度服务中。此特定客户端为特定更新工作发送事件,如下所示:

app.service('AngularClient', function () {
  this.info = null
  this.login = function () {
    client.login(loginInfo).then(function (loggedClient) {
      loggedClient.on('newInfo', function (info) {
        this.info = info
      })
    })
  }
})

控制器使用此服务并将其绑定到$scope

app.controller('Ctrl', function (AngularClient, $scope) {
   $scope.client = AngularClient
})

但是,只要'newInfo'事件被触发,角度就不会自动触发digest周期,因此我无法控制何时在UI中更新info。确保每次都发生这种情况的角度方法是什么?

2 个答案:

答案 0 :(得分:1)

如果您想继续接收登录事件的更新,您可以执行以下操作:

string[] Extensions = {"*.txt", "*.doc", "*.ppt"};
foreach(var ext in Extensions)
{
    GetFiles(ext);
}
private void GetFiles(string ext)
{
    List<string> files = new List<string>();
    files = Directory.GetFiles("c:/something", ext).ToList();
    // Something you want to do with these files.
}

答案 1 :(得分:0)

如果在您的代码创建的自定义异步方法上,Angular将不会意识到它应该再次消化。

解决这个问题的方法是使用app.service('AngularClient', function () { this.info = null this.loginCallback = null this.login = function () { client.login(loginInfo).then(function (loggedClient) { loggedClient.on('newInfo', function (info) { this.info = info if (this.loginCallback) this.loginCallback(info); }) }) } }) app.controller('Ctrl', function (AngularClient, $scope) { $scope.client = AngularClient AngularClient.loginCallback = function(info, err){ // optional error $scope.user.property = info.property; $scope.$apply(); } }) 。但是,$ scope不会向您的服务公开。因此,在角度控制器上,您可以将事件的侦听功能包装到$scope.$apply();

$apply()

http://jimhoskins.com/2012/12/17/angularjs-and-apply.html