Reputation: 515
I have the following controller:
public class UserController : BaseApiController
{
// GET api/<controller>
public string Get()
{
var currentuser = CurrentUser.Name;
return currentuser;
}
}
The value of currentuser I pass it the datacontext in this way:
function getName() {
var deferred = $q.defer();
var promise = deferred.promise;
cachedPromises.currentuser = promise;
$http.get(baseUrl + 'api/user').success(getSucceeded).error(getFailed);
return cachedPromises.currentuser;
function getSucceeded(data) {
console.log('data:', data);
}
function getFailed(parameters) {
console.log("failed", parameters);
}
}
On the console log console.log('data:', data);
I get the value and in order to apply binding I have to pass this value to the scope in the controller.js. In order to do that, I have done a controller in this way.
LogName.$inject = ['$scope', 'datacontext']
function LogName($scope, datacontext) {
$scope.name =[];
datacontext.getName().then(function (currentuser) {
$scope.name = currentuser;
});
}
And on the view I have the following code for data binding :
<h1 ng-controller="LogName" class="title">{{name}}</h1>
The binding is shown as an empty array, and I don't understand what goes wrong .
EDIT: When I do a console log on the controller:
datacontext.getName().then(function (currentuser) {
$scope.name = currentuser;
console.log('current', currentuser);
});
Nothing appears on the view, the compiler does not reach the datacontext.getName
Upvotes: 1
Views: 524
Reputation: 204
There are two issues:
Firstly, you are not resolving the promise. You need to resolve your promise with your data that is returned from the server.
Second, the result is actually in the results
property of the data that is returned from the server. Here as you are retrieving only name, you should use below code:
function getSucceeded(data) {
console.log('data:', data);
deferred.resolve(data.results[0]);
}
Upvotes: 1
Reputation: 5313
You are never resolving your promise to provide the name. Add a resolve to the getSucceeded function and a reject to the error function.
function getSucceeded(data) {
console.log('data:', data);
promise.resolve(data);
}
function getFailed(parameters) {
console.log("failed", parameters);
promise.reject(parameters);
}
This will provide the data to the functions that are waiting on the promise results.
Upvotes: 1
Reputation: 16508
You MVC controller returning string public string Get()
and you declare $scope.name =[];
as array change it to $scope.name ='';
that should helps
and change your function getName to :
function getName() {
var deferred = $q.defer();
$http.get(baseUrl + 'api/user').success(getSucceeded).error(getFailed);
return deffered.promise;
function getSucceeded(data) {
console.log('data:', data);
//add this
deferred.resolve(data);
}
function getFailed(parameters) {
console.log("failed", parameters);
deferred.reject(parameters);;
}
return deffered.promise;
}
Upvotes: 1