当前位置: 首页 > 面试题库 >

在另一个指令中使用角度指令

鲜于勇
2023-03-14
问题内容

我创建了下面的角度指令, ChildDirective ,在 ParentDirective中使用

var wizardModule = angular.module('Wizard', []);

wizardModule.directive('childDirective', function ($http, $templateCache, $compile, $parse) {
return {
    restrict: 'E',
    scope: [],
    compile: function (iElement, iAttrs, transclude) {
        iElement.append('child directive<br />');
    }
}
})

wizardModule.directive('parentDirective', function ($http, $compile) {
return {
    restrict: 'E',
    compile: function (element, attrs) {
        var x = '<child-directive></child-directive><child-directive></child-directive>';
        element.append(x);
    }
}

这正常工作,并且出现了几个子指令。

我想更新 ParentDirective ,以从服务器获取 childDirective 的列表。因此,我更新了
ParentDirective 代码以进行Ajax调用,然后绘制 ChildDirectives

var elem;
wizardModule.directive('parentDirective', function ($http, $compile) {
return {
    restrict: 'E',
    compile: function (element, attrs) {
        var controllerurl = attrs.controllerurl;
        elem = element;

        if (controllerurl) {
            $http.get(controllerurl + '/GetWizardItems').
            success(function (data, status, headers, config) {
                var x = '<child-directive></child-directive><child-directive></child-directive>';
                elem.append(x);
                $compile(x);
            });
        }
    }
}
});

问题是, childDirectives 没有出现任何更多的,虽然在debeggur它正在进入到的编译方法 childDirective


问题答案:

您必须将已编译的元素链接到作用域。由于不再修改模板元素,因此应将新元素附加到链接的元素。你可以这样做:

var elem;
wizardModule.directive('parentDirective', function ($http, $compile) {
return {
    restrict: 'E',
    compile: function (element, attrs) {
        var controllerurl = attrs.controllerurl;
        elem = element;

        if (controllerurl) {
          return function(scope,element){
            $http.get(controllerurl + '/GetWizardItems').
            success(function (data, status, headers, config) {
                var x = angular.element('<child-directive></child-directive><child-directive></child-directive>');
                element.append(x);
                $compile(x)(scope);
            });
          }
        }
    }
}
});


 类似资料:
  • 问题内容: 我正在尝试使用Angular的“装饰器”功能向某些指令添加功能。假设我的指令名称是myDirective。我的代码如下所示: ]); 我不断收到此消息: 尽我所能,指令在装饰器函数运行时已被注册。任何见识将不胜感激! 问题答案: 本文说明了实际上如何将带指令的decorator()使用。 您只需将“指令”作为名称的后缀即可。因此,在我的示例中,我应该一直在做 http://angula

  • 问题内容: 我想对第3方指令(特别是Angular UI Bootstrap)进行较小的修改。我只是想添加指令的范围: 但是我也想让Bower与Angular-Bootstrap保持同步。运行后,我将覆盖所做的更改。 那么,如何与该Bower组件分开扩展该指令? 问题答案: 解决此问题的最简单方法可能是在您的应用上创建与第三方指令同名的指令。这两个指令都将运行,并且您可以使用属性指定运行顺序(优先

  • 我不知道我想做的是否可能。我正在尝试创建一个Angular指令,该指令在数据对象上重复并打印出其值以及具有类似结构的第二个不相关对象的值。 我正在开发一个翻译应用程序,其中语言文件的主版本显示在一列中,翻译显示在下一列中。我想通过主对象重复,然后在有翻译的地方显示翻译。我不想合并这两个对象,因为我更喜欢在翻译对象和DOM之间保持双向绑定,以便可以轻松保存。 这正是我想做的: 目标 DOM输出 我作

  • 问题内容: 我有一个带有变量类型的指令myDirective。如果我运行,我希望指令使用templateUrl:x-template.html。如果我愿意,指令可以使用templateUrl:y-template.html。 这是我目前的指令。 我通过stackoverflow和angular文档阅读,但是没有找到我需要的任何东西。 我现在正在尝试按照以下方式进行操作: 但是不知道在哪里做。 你们

  • 问题内容: 如何在指令中设置插值?我可以从以下代码中读取正确的值,但无法设置它。 js: HTML: 我的控制器范围内的值在哪里? 问题答案: 如果要在范围上设置值,但不知道属性名称(提前),则可以使用以下语法: 如果属性中的字符串包含点(例如),则将无法使用;您可以用来做作业: 如果使用隔离范围,则可以使用批注: 您可以在此Angular /jQuery颜色选择器JSFiddle示例中看到一个示

  • 本文描述了如何在同一个指令中实现多个选择器: https://www . benna del . com/blog/3367-matching-multiple-selectors-on-the-same-element-create-a-single-directive-instance-in-angular-5-0-0 . htm 但是当我定义或时,两者都是针对相同的指令。 能单独定义一下吗?