以编程方式使用常量值定义角度指令?

时间:2015-09-18 17:34:52

标签: angularjs angularjs-directive

我目前正在通过一系列值以编程方式定义一些指令(在此示例中为let params = NSMutableDictionary() params.setObject(fullName.text!.lowercaseString, forKey: "username") let result: AnyObject? = try! PFCloud.callFunction("checkUsername", withParameters: params as [NSObject : AnyObject])

directiveNames

我现在想在其他地方重用这个数组。

var directiveNames = ['foo', 'bar'];

directiveNames.forEach(function(name) {
    angular
        .module('myModule')
        .directive(name, buildDirective(name));
});

function buildDirective(name) {
    return function() {
        return {
            restrict: 'E',
            template: '<p>' + name + '</p>'
        };
    };
}

问题是,我不知道如何将注入这个常量放到上面的代码片段中。我尝试将代码包装在angular .module('myModule') .constant('directiveNames', ['foo', 'bar']); module.config块中,但这似乎不起作用。

这可能吗?如果是这样的话?

3 个答案:

答案 0 :(得分:1)

作为免责声明,我真的不明白为什么你必须这样做,我绝对不同意。事实上,你正在走出Angular生命周期之外,并且基本上是对你的角度应用进行元编程。因此,您需要一个主要存在于Angular之外的解决方案。这里有适合你的东西:

window.MyDirectiveDefinitions = ['some', 'crazy', 'directives'];

然后:

angular.module('myApp')
  .constant('directiveDefinitions', window.MyDirectiveDefinitions);

然后......:

angular.forEach(window.MyDirectiveDefinitions, function(directive) {
  angular.module('myApp')
    .directive(directive, function(Your, Services) {
      // Define your directive.
    });
});

希望有所帮助。

答案 1 :(得分:0)

鉴于您的代码,您可以将其作为新的javascript文件执行:

int8_t

然后你注入&#34; myConstants&#34;进入你的指令控制器并调用这样的值:

var app = angular.module("myModule");
app.constant("myConstants", {
  "constant1": 1,
  "constant2": "two"
});

答案 2 :(得分:0)

尝试以下方法:

var module = angular.module('myWorld', []);
module.constant('directiveName', ['foo', 'bar']);

var namesOfDirectives = module._invokeQueue.filter(function(a){
  if (a[0] === '$provide' && a[1] === 'constant' && a[2][0] === 'directiveName'){
     return a;    
   }  
})[0][2][1];

console.log(namesOfDirectives);

请参阅http://taoofcode.net/studying-the-angular-injector-loading-modules/

... _invokeQueue使用熟悉的angular.module('myModule')控制器,angular.module('myModule')指令添加到模块中的每个服务。调用。队列中的每个项目都是一个包含三个元素的数组。第一个是将调用服务的提供程序,第二个是提供程序要使用的方法,第三个元素是传递给服务的任何参数的数组。 ..

相关问题