我正在使用WCF实现服务器,并尝试使用使用Angular开发的客户端来访问其余服务。
这是服务:
public interface IConnexion
{
[OperationContract]
[WebGet(UriTemplate = "Connexion/{login}/{mdp}", ResponseFormat = WebMessageFormat.Json)]
Utilisateur Connexion(string login, string mdp);
[OperationContract]
[WebInvoke(UriTemplate = "Deconnexion/{id_user}", RequestFormat = WebMessageFormat.Json)]
void Deconnexion(string id_user);
}
我的功能试图达到服务:
app.service('serverConnexionServices', function(userService, serverConfigService) {
this.Connexion = function(login, pass)
{
var uri = this.getServerUri() + "Connexion/"+login+"/"+CryptoJS.MD5(pass);
var promises = $http.get(uri)
.success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
return data;
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
return "";
});
return promises;
};
});
我的表格的控制者:
app.directive('loginContent', function(userService, serverConnexionServices){
return{
restrict : 'E',
templateUrl : "includes/home/login-content.html",
controllerAs: "loginController",
controller: function($scope, userService, serverConnexionServices) {
var IsSubmitEnabled = true;
this.errors = "";
this.validateLogin = function(user) { // Calling the service
this.IsSubmitEnabled = false; // To avoid more than one click while checking on the server
var retour = serverConnexionServices.TryConnection(user).then(function(promise) {
alert('promise:'+retour);
if(promise.length > 0)
{ // There is an error so we show a message to the user
this.promise= retour;
}
this.IsSubmitEnabled = true;
user = {};
});
};
}
}
});
但是当我尝试打开我的客户端时,在Visual Studio中引发断点之前会出现警告框(我将断点放在我的“Connexion”函数的第一行。所以这意味着服务器尚未回答请求,但$ http.get()已经发送了它的答案。所以结果对象不包含服务器发送的内容。根据Angular的文档,响应将异步发送。但是如何强制我的请求等待答案?
我的控制器现在从服务器获得答案,但它没有更新视图,如果我尝试手动调用$ scope。$ apply()我收到错误“$ digest已在进行中”。我如何强迫我的观点刷新自己? (我注意到,如果我把this.errors =“aaa”;一旦“then”关闭,我的视图会刷新并且“aaa”,我还检查了errors.length> 0并带有警告信息)
我的观点:
<div ng-show="loginController.errors.length > 0" class="alert alert-danger" role="alert" style="display: inline-block;"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>{{loginController.errors}}</div>
编辑:我现在可以在Visual Studio的Connexion
实现中到达我的断点,但服务器的答案仍然不是预期的
EDIT2 :我添加了需要刷新的控制器。
EDIT3 :好的,我更新了我的代码,我需要在控制器的呼叫上加上“then”功能,我的控制器现在可以得到答案。但是我的观点不会在错误上更新。它应该将div可见性设置为true,但异步调用似乎阻止它。我试过使用apply()和digest()但没有成功。你能帮帮我吗?