0

2sxc模块应用程序中,我想从函数或外部 Web api 获取“字符串下拉值”的值,而不是输入的值列表。

默认情况下这是可能的还是有人可以给我一些指南从哪里开始?

(编辑/添加)是使内容自定义输入类型成为唯一的方法,还是有一些更简单的方法?

4

3 回答 3

1

所以基本上你的代码在 Angular 中运行,它也加载了 2sxc4ng。至少有 3 种方法可以解决您的问题。

  1. 您可以使用 sxc 对象,它与 $2sxc(moduleId) 相同
  2. 你可以使用 iid
  3. 您可以只使用 $http,因为它已经在标头中预加载了模块 ID

使用 $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)

那应该这样做。

于 2016-08-12T06:29:07.780 回答
0

创建自定义输入类型是目前唯一的方法。由于很多人都在寻找这样的东西,如果你能赞助/贡献它会很棒:)

于 2016-08-09T06:29:56.393 回答
0

我附上了几乎没有描述的示例应用程序。

下载

所有的东西都已经在这个链接上描述好了: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;
});

我真的不知道我在做什么......似乎我学到的越多,我知道的越少:-(以及带有尝试/错误系统的代码以获得部分可用的东西......

于 2016-08-10T11:45:49.367 回答