gpt4 book ai didi

javascript - 通过使用 $resource 从 Angular ​​调用 c# webservice 来设置 Controller 变量

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:09 28 4
gpt4 key购买 nike

我在使用来自服务的 JSON 数据时遇到问题。后端用 C# 编写,前端用 AngularJS 编写。

我无法在 Angular Controller 中使用我想要的对象。

所以,这是我在 C# 中的 api restful 服务

[Route("v1/environment")]
public IHttpActionResult GetEnvironment()
{
var env = new Environment(WebConfigurationManager.AppSettings["Env"]);
return this.Ok(env);
}

然后,这是我的 Angular 服务:

module.factory('Environment', [
'$resource',
function ($resource) {
return $resource('/MorpheusApi/v1/environment', {}, {
getEnv: {method: 'GET', isArray: false}
});

}
]);

然后出于测试目的,我还创建了此服务:

 module.factory('Env', [
'Environment',
function (Environment) {
return {
getEnv: function () {
var s = Environment.getEnv();
var e = angular.fromJson(s);
return e;
}
};
}
]);

然后我会像这样在 Controller 中使用它:

$scope.envLocal = Env.getEnv();

然后在用户界面中,用这个

<p>Environment Local: {{envLocal}}</p>
<p>Environment Local Env: {{envLocal.Env}}</p>

我得到以下输出,我认为这很好:)

Environment Local: {"Env":"testText"}

Environment Local Env: testText

但是当我现在想说只提供从 Controller 到 ui 的 testText 时,我会做这样的事情:

    var result = Env.getEnv();
$scope.envLocal = result.Env;

但是这不起作用..我也尝试过使用 angular.toJson..angular.fromJson,但是我在 UI 中没有得到任何东西..为什么?我如何在 Controller 中正确使用该对象,例如,如果我想在 if 或其他情况下使用它..

这可能吗?

最佳答案

你也可以这样写你的工厂,这样你就不需要写两个不同的服务。

module.factory('Environment', ['$resource',
function ($resource) {
var api = $resource('/MorpheusApi/:action/:subaction', {}, {
getEnv: {
method: 'GET',
params: {
action: "v1",
subaction:"environment"
},
isArray: false
}
});
return {
getEnv: function () {
return api.getEnv().$promise;
}
};
}
]);

之后你只需要将这个服务注入(inject)到 Controller 中,你就可以轻松调用函数了。

Environment.getEnv()
.then(function (response) {
//If you wants to perform any logic on response object then you can do here and after that you can assign to scope variable
// You can write this logic in service too
$scope.envLocal = response;
});

您可以调用我上面提到的服务,因为 $resource 返回 promise ,您的范围对象将在成功调用 api 时设置,而无需在此处调用 $scope.$apply()

假设你有两个不同的喜欢

/MorpheusApi/v1/environment

/MorpheusApi/v2/environment

您可以根据需要配置两条这样调用函数的路由。

module.factory('Environment', ['$resource',
function ($resource) {
var api = $resource('/MorpheusApi/:action/:subaction', {}, {
getEnv: {
method: 'GET',
params: {
action: "v1",
subaction:"environment"
},
isArray: false
},
getEnvV2: {
method: 'GET',
params: {
action: "v2",
subaction:"environment"
},
isArray: false
}
});
return {
getEnv: function () {
return api.getEnv().$promise;
},
getEnvV2: function () {
return api.getEnvV2().$promise;
}
};
}
]);

有关配置和理解的更多信息,您可以阅读此 Explanation of configration and working of $resource

关于javascript - 通过使用 $resource 从 Angular ​​调用 c# webservice 来设置 Controller 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455067/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com