我正在将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
。确保每次都发生这种情况的角度方法是什么?
答案 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()