Angularjs 如何从数据库中添加新的指令信息?

Angularjs 如何从数据库中添加新的指令信息?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有一个有趣的情况,我完全承认我可能没有正确处理 我想使用AngularAMD将指令加载到Angular应用程序中,但有关指令的信息来自数据库/API调用。我现在是这样处理的: app.run(function ($rootScope, $state, $http) { $rootScope.$state = $state; $rootScope.rootPages = JSON.parse(localStorage.pages); $http.get('api/Dir

我有一个有趣的情况,我完全承认我可能没有正确处理

我想使用AngularAMD将指令加载到Angular应用程序中,但有关指令的信息来自数据库/API调用。我现在是这样处理的:

app.run(function ($rootScope, $state, $http) {
    $rootScope.$state = $state;
    $rootScope.rootPages = JSON.parse(localStorage.pages);

    $http.get('api/Directives').then(function (resp) {
        for (var i = 0; i < resp.data.length; i++) {
            var dirInfo = resp.data[i];
            var dirConfig = JSON.parse(dirInfo.Configuration);

            angularAMD.directive(dirInfo.Name, function () {
                return {
                    restrict: 'E',
                    controller: eval(dirConfig.controller),
                    templateUrl: dirConfig.templateUrl,
                    scope: true,
                }
            });
        }
    }, function (error) {
        alert('error');
    });
});
在这种情况下,只显示directiveTwo.html,并且只触发controllerTwo


任何帮助都将不胜感激。

将for循环用于延迟/异步操作不是常见问题。 在第一个
angularAMD.directive
被解析时,
var dirInfo=resp.data[i]等于列表中的最后一项

您需要在循环中使用Promissions或anonymous函数来保持指向异步函数中正确索引的链接。请在此处查看您的案例中发生的简单示例:

for(i=0;i
将for循环用于延迟/异步操作不是常见的问题。 当第一个
angularAMD.directive
被解析时,
var dirInfo=resp.data[i];
循环内部等于列表中的最后一项

您需要在循环中使用Promissions或anonymous函数来保持指向async函数中正确索引的链接。请在此处查看发生在您的案例中的简单示例:

for(i=0;i
所以基本上我把循环的内部包装成了一个承诺,现在它正是我需要它去做的。非常感谢!所以基本上我把循环的内部包装成了一个承诺,现在它正是我需要它去做的。非常感谢!
dirInfo1: {
    Name: directiveOne,
    templateUrl: /html/directiveOne.html,
    controller: controllerOne
}

dirInfo2: {
    Name: directiveTwo,
    templateUrl: /html/directiveTwo.html,
    controller: controllerTwo
}    
for ( i = 0; i < items.length; i++) {
  (function(thisItem) {
    setTimeout(function() {
     console.log(thisItem);
    }, i * 1000);
  )(items[i]);
}