Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在AngularJS中生成即时指令?_Angularjs_Angularjs Directive - Fatal编程技术网

如何在AngularJS中生成即时指令?

如何在AngularJS中生成即时指令?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我希望能够获取字符串数组,然后基于这些字符串创建指令。元素或属性都可以正常工作,但似乎无法使其正常工作 <div ng-repeat="module in modules.directives"> <div {{module.directive}}></div> </div> <div ng-repeat="module in modules.directives"> <{{module.directive}}&

我希望能够获取字符串数组,然后基于这些字符串创建指令。元素或属性都可以正常工作,但似乎无法使其正常工作

<div ng-repeat="module in modules.directives">
    <div {{module.directive}}></div>
</div>

<div ng-repeat="module in modules.directives">
    <{{module.directive}}></{{module.directive}}>
</div>

<div ng-repeat="module in modules.directives">
    <{{module.directive}} />
</div>


这些都不能用。有什么想法吗?

ng include
可以帮助您。方法是为每个指令定义一个模板。像这样的

<script type="text/ng-template" class="template" id="test-module">
<test-module></test-module>
</script>

然后在ng重复做

<div ng-repeat="module in modules.directives">
     <ng-include src="module.directive">
</div


您可以定义一个指令来代理另一个这样的指令

<div proxy="'ng-if'" proxy-value="'foo'"></div>
<div ng-init="n='ng-if'; v='foo';" proxy="n" proxy-value="v"></div>
这实际上是一个有趣的指令,一生只写一次。:-)但它缺少许多本机指令特性(例如模板、templateUrl、控制器等)。所有这些功能都可以在原始Angle源代码中的一个名为
applyDirectivesToNode
的私有函数中获得,因此复制/粘贴某些部分很容易,但是。。。我已经编写了一个与您的用例相匹配的演示


如果您不介意代理指令与
代理
指令不共享相同的元素,另一个解决方案是在运行时
$compile
一个动态模板,您将包括该模板。这是一个。

为什么需要这样做?您的指令在代码中是固定的和预定义的吗?是的,预定义的。如果我手动输入
,它会工作。甚至
也能工作。但是
class=“{module.directive}}”
不起作用。@ovmjm模块由动态源代码控制,所以我不能硬编码任何东西。但是每个模块都必须在脚本标记中硬编码吗?指令的名称应该事先知道,并且应该使用模板注册,并且匹配的脚本
id
似乎不起作用。我可能应该提到,这是在另一个指令中。尝试了
,但没有任何ng重复,但没有骰子。此脚本应在html中定义。您应该能够通过执行
$(“#测试模块”)
来获取此对象。它应该是DOM的一部分。返回是什么意思?有什么需要调查的吗?您的需求只涉及纯模板指令?因为我可以想出一种方法来代理指令功能,如模板或templateUrl,这很有趣,我已经有了模板代理,但它越来越难看了。也许如果你解释一下你真正想要达到的目标,我们可能会找到一个更直接的解决你问题的方法。这可能适用于您的用例。但是,让我明白,你真的需要指令吗?或者任何其他小部件系统都能满足您的根本需求?因为也许你真正想要的只是一对partial/controller。下面是一个partial/controller小部件的演示。如果您以具有复杂UI的独立小部件为目标,这是很好的。如果您针对更小的可重用和可组合的小部件组件,则指令会更好。我想。
<div ng-if="foo"></div>
app.directive('proxy', function ($parse, $injector) {
    return function (scope, element, attrs) {
        var nameGetter = $parse(attrs.proxy);
        var name = nameGetter(scope);
        var value = undefined;
        if (attrs.proxyValue) {
          var valueGetter = $parse(attrs.proxyValue);
          value = valueGetter(scope);
        }
        var directive = $injector.get(name + 'Directive')[0];
        if (value !== undefined) {
            attrs[name] = value;
        }
        return directive.compile(element, attrs, null)(scope, element, attrs);
    };
});