在2sxc模块应用程序中,我想从函数或外部 Web api 获取“字符串下拉值”的值,而不是输入的值列表。
默认情况下这是可能的还是有人可以给我一些指南从哪里开始?
(编辑/添加)是使内容自定义输入类型成为唯一的方法,还是有一些更简单的方法?
所以基本上你的代码在 Angular 中运行,它也加载了 2sxc4ng。至少有 3 种方法可以解决您的问题。
使用 $http 非常清楚 - 如果您查看线路,您会看到 moduleid 已经包含在标头中。
要访问 iid 或 sxc 对象,您需要将它们作为依赖项放在这一行中
.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)
那应该这样做。
创建自定义输入类型是目前唯一的方法。由于很多人都在寻找这样的东西,如果你能赞助/贡献它会很棒:)
我附上了几乎没有描述的示例应用程序。
所有的东西都已经在这个链接上描述好了:http: //2sxc.org/en/blog/post/configurable-custom-input-type-dynamic-data-content
我只是将此示例更改为使用字符串,主要代码更改在角度控制器中,我的代码如下所示:
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 创建,这是“string-nn-json-list”的默认 jsonUrl。您可以在字段设置中更改此 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;
});
我真的不知道我在做什么......似乎我学到的越多,我知道的越少:-(以及带有尝试/错误系统的代码以获得部分可用的东西......