2sxc:从 code/api 中填充字符串下拉值
2sxc : Fill String Dropdown Values from code/api
在 2sxc 模块应用程序中,我想从函数或外部网络 api 中获取 "String Drop Down Values" 的值,而不是使用输入的值列表。
这在默认情况下是否可行,或者有人可以给我一些指导,从哪里开始执行此操作?
(EDIT/ADD)
使 Content Custom Input Type 是唯一的方法,还是有一些更简单的方法?
创建自定义输入类型是目前唯一的方法。由于很多人都在寻找这样的东西,如果你能 sponsor/contribute 就太好了 :)
我附上了带有少量描述的示例应用程序。
所有的东西都已经描述好了 link: http://2sxc.org/en/blog/post/configurable-custom-input-type-dynamic-data-content
我只是将此示例更改为使用字符串,主要代码更改在 angular 控制器中,我的代码如下所示:
var url;
var controlSettings = $scope.to.settings["string-nn-json-list"];
if (controlSettings) url = controlSettings.jsonUrl || null;
// if null set default apiUrl
if (url === null) url = "http://www.mocky.io/v2/57aae03e120000be10739d3b";
$http({
method: 'GET',
url: url,
headers: {
'TabId': undefined,
'Pragma' : undefined,
'RequestVerificationToken' : undefined,
'Cache-Control' : undefined,
'Debugging-Hint' : undefined,
'ContentBlockId' : undefined,
'ModuleId' : undefined,
}
}).then(function successCallback(response) {
$scope.json_list_data = response.data;
});
对于外部 json api 数据,我使用这个:http://www.mocky.io/v2/57aae03e120000be10739d3b 在 www.mocky.io 上创建,这是默认的 jsonUrl "string-nn-json-list"。您可以在字段设置中更改此 url。
编辑(1)
我试图在 iid 的帮助下将 moduleId 获取到控制器中,但没有成功..
(function() {
"use strict";
angular.module("nnStringFromIntJsonData", [])
.config(function(formlyConfigProvider, defaultFieldWrappers) {
})
.controller("FieldTemplate-String-Nn-Int-Json-List", function($scope, $filter, $modal, appId, debugState, eavAdminDialogs, $http) {
// What to change in this code
// that I can get iid (moduleId) in this part of code?
debugger;
})
.run(
function($templateCache) {
})
})();
我必须更改(添加)到此代码才能访问 iid 的内容?
编辑(2)
一种方法但失去了安全性(我只用于读取不重要的数据)是你删除 Api 控制器属性的方法:
[DnnModuleAuthorize] 和 [ValidateAntiForgeryToken] 并仅保留 [HttpGet]
并且当从自定义输入类型控制器调用时使用类似的东西:
var url = "/DesktopModules/2sxc/API/app-api/{ControllerName}/{MethodName}";
$http.get(url).then(function successCallback(response) {
$scope.json_list_data = response.data;
});
我真的不知道我在做什么...似乎我知道的越多我知道的越少 :-( 并使用 try/error 系统进行编码以获得部分可用的东西...
所以基本上你的代码是 运行 在 Angular 里面,它也加载了 2sxc4ng。至少有 3 种方法可以解决您的问题。
- 你可以使用 sxc object,它与 $2sxc(moduleId)
相同
- 你可以使用 iid
- 您可以只使用 $http,因为它已经 pre-loaded 和 headers
中的 module-id
使用 $http 非常清楚 - 如果您观察连线,您会发现 moduleid 已经包含在 headers 中。
要访问 iid 或 sxc object,您需要将它们作为依赖项放在这一行中
.controller("FieldTemplate-String-Nn-Int-Json-List", function($scope, $filter, $modal, appId, debugState, eavAdminDialogs, $http)
所以你需要
.controller("FieldTemplate-String-Nn-Int-Json-List", function($scope, $filter, $modal, appId, debugState, eavAdminDialogs, $http, iid, sxc)
应该可以了。
在 2sxc 模块应用程序中,我想从函数或外部网络 api 中获取 "String Drop Down Values" 的值,而不是使用输入的值列表。
这在默认情况下是否可行,或者有人可以给我一些指导,从哪里开始执行此操作?
(EDIT/ADD) 使 Content Custom Input Type 是唯一的方法,还是有一些更简单的方法?
创建自定义输入类型是目前唯一的方法。由于很多人都在寻找这样的东西,如果你能 sponsor/contribute 就太好了 :)
我附上了带有少量描述的示例应用程序。
所有的东西都已经描述好了 link: http://2sxc.org/en/blog/post/configurable-custom-input-type-dynamic-data-content
我只是将此示例更改为使用字符串,主要代码更改在 angular 控制器中,我的代码如下所示:
var url;
var controlSettings = $scope.to.settings["string-nn-json-list"];
if (controlSettings) url = controlSettings.jsonUrl || null;
// if null set default apiUrl
if (url === null) url = "http://www.mocky.io/v2/57aae03e120000be10739d3b";
$http({
method: 'GET',
url: url,
headers: {
'TabId': undefined,
'Pragma' : undefined,
'RequestVerificationToken' : undefined,
'Cache-Control' : undefined,
'Debugging-Hint' : undefined,
'ContentBlockId' : undefined,
'ModuleId' : undefined,
}
}).then(function successCallback(response) {
$scope.json_list_data = response.data;
});
对于外部 json api 数据,我使用这个:http://www.mocky.io/v2/57aae03e120000be10739d3b 在 www.mocky.io 上创建,这是默认的 jsonUrl "string-nn-json-list"。您可以在字段设置中更改此 url。
编辑(1)
我试图在 iid 的帮助下将 moduleId 获取到控制器中,但没有成功..
(function() {
"use strict";
angular.module("nnStringFromIntJsonData", [])
.config(function(formlyConfigProvider, defaultFieldWrappers) {
})
.controller("FieldTemplate-String-Nn-Int-Json-List", function($scope, $filter, $modal, appId, debugState, eavAdminDialogs, $http) {
// What to change in this code
// that I can get iid (moduleId) in this part of code?
debugger;
})
.run(
function($templateCache) {
})
})();
我必须更改(添加)到此代码才能访问 iid 的内容?
编辑(2)
一种方法但失去了安全性(我只用于读取不重要的数据)是你删除 Api 控制器属性的方法:
[DnnModuleAuthorize] 和 [ValidateAntiForgeryToken] 并仅保留 [HttpGet]
并且当从自定义输入类型控制器调用时使用类似的东西:
var url = "/DesktopModules/2sxc/API/app-api/{ControllerName}/{MethodName}";
$http.get(url).then(function successCallback(response) {
$scope.json_list_data = response.data;
});
我真的不知道我在做什么...似乎我知道的越多我知道的越少 :-( 并使用 try/error 系统进行编码以获得部分可用的东西...
所以基本上你的代码是 运行 在 Angular 里面,它也加载了 2sxc4ng。至少有 3 种方法可以解决您的问题。
- 你可以使用 sxc object,它与 $2sxc(moduleId) 相同
- 你可以使用 iid
- 您可以只使用 $http,因为它已经 pre-loaded 和 headers 中的 module-id
使用 $http 非常清楚 - 如果您观察连线,您会发现 moduleid 已经包含在 headers 中。
要访问 iid 或 sxc object,您需要将它们作为依赖项放在这一行中
.controller("FieldTemplate-String-Nn-Int-Json-List", function($scope, $filter, $modal, appId, debugState, eavAdminDialogs, $http)
所以你需要
.controller("FieldTemplate-String-Nn-Int-Json-List", function($scope, $filter, $modal, appId, debugState, eavAdminDialogs, $http, iid, sxc)
应该可以了。