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
Javascript 如何手动将内部指令转移到两个位置?_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 如何手动将内部指令转移到两个位置?

Javascript 如何手动将内部指令转移到两个位置?,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我需要访问ng repeat的结果,我发现我可以使用transclude函数并手工编译。但问题是,它不适用于2个位置和具有ng repeat的元素。我的代码如下所示: return { restrict: 'E', require: '?ngModel', template: 'HTML' transclude: true, replace: true, link: function(scope, element, attrs, ngModelCt

我需要访问ng repeat的结果,我发现我可以使用transclude函数并手工编译。但问题是,它不适用于2个位置和具有ng repeat的元素。我的代码如下所示:

return {
    restrict: 'E',
    require: '?ngModel',
    template: 'HTML'
    transclude: true,
    replace: true,
    link: function(scope, element, attrs, ngModelCtrl, $transclude) {
        var caption = element.find('.caption');
        var dropdown = element.find('.dropdown-menu');
        $transclude(function(clone) {

            //var clone_clone = clone.addClass('ng-hide');
            //$compile(clone.contents())(scope.$new()).appendTo(caption);

            $compile(clone)(scope.$new()).appendTo(dropdown);
            $compile(clone)(scope.$new()).appendTo(caption);
        });
    }
};
当我只运行一个compile,但在第二个compile时抛出异常时,它就可以工作了,我尝试克隆并使用带有transclude的内容:“element”。我该怎么做?我需要有与ng transclude ng translcude相同的行为。不要使用ng repeat,因为在链接中我有一个元素,而不是元素列表

更新:用法:


所以我需要调用transclude两次:

$transclude(function(clone) {
    $compile(clone)(scope.$new()).appendTo(caption);
});
$transclude(function(clone) {
    $compile(clone)(scope.$new()).appendTo(dropdown);
});

你的HTML是什么样子的,你能显示正在使用的指令,包括转置的内容吗?
$transclude(function(clone) {
    $compile(clone)(scope.$new()).appendTo(caption);
});
$transclude(function(clone) {
    $compile(clone)(scope.$new()).appendTo(dropdown);
});