如何在 AngularJs 控制器或服务中访问 POJO 属性

Posted

技术标签:

【中文标题】如何在 AngularJs 控制器或服务中访问 POJO 属性【英文标题】:how to access POJO property in AngularJs Controller or Service 【发布时间】:2017-06-10 05:27:50 【问题描述】:

我的AppConfig java 类中有一个配置属性serverName,它从cloud config client 获取值。这个serverName 值用于Java 类和AngularJS Services。这个serverName对于不同的环境有不同的值。

我的问题

目前我正在使用 pcf spring cloud config 和具有不同值的不同配置文件。所以 Java 类访问 serverName 没有问题,但在 AngularJS service 我是 manually changingserverName 值部署到各自的 environment 值之前将其部署到各自的环境。

我的问题

有没有办法将AppConfigserverName 属性访问到我的AngularJS Service 中?

AppConfig Java

@EnableConfigurationProperties
@ConfigurationProperties
@RefreshScope
@Configuration
public class AppConfig 
    @Value("$external.server.name")
    private String serverName;

application.yml

external:
    server:
        name: localName
        

my_service.js

angular.module('myApp').factory('myService', ['$http', '$q', '$window', function($http, $q, $window)
    var serverName = 'localName'; 
    // for each env deployment make sure the developer changes the value to respective env value, if not the service will fail
    .....

【问题讨论】:

为什么客户端需要服务器名? 从angularJS服务调用serverName上的rest服务 @KursadGulseven 实际上我正在使用从 my_service.js 到 Rest Controller$http.get('serverName') 进行休息呼叫,所以如果在本地,那么它将是 $http.get('http://localhost:8080'), once I deploy this to qat it will be the qaturl. Is there anyway to make rest call from js` 到 java rest controller 【参考方案1】:

您可以创建自己的 REST 控制器,例如 /config,它返回服务器名称以及客户端可能需要的任何其他内容。 在此控制器中,您可以像在 AppConfig 中一样注入服务器名称。

更简单 如果您已经有一个控制器,在您需要服务器名称之前由 angular 调用,您可以使用相关值设置一个像“x-server-name”这样的标头。

【讨论】:

【参考方案2】:

Stefan 的回答对您想做的事情很有用。但是,如果它是您的应用程序服务器,则不需要服务器地址。 $http.get('api/getUser')$http.get(servername + '/api/getUser') 相同。如果您在客户端需要除“服务器名称”之外的任何其他服务器端属性;那么您可以应用 Stefan 的答案。

【讨论】:

以上是关于如何在 AngularJs 控制器或服务中访问 POJO 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在angularjs ui-router中的状态之间共享$ scope数据?

如何在 angularjs ui-router 中的状态之间共享 $scope 数据?

从angularjs中的服务调用控制器函数

如何使用AngularJS在浏览器控制台中访问$ scope变量?

访问控制允许来源 angularjs 到 php

AngularJS - 如何从控制器中的ng-repeat访问下一个项目