javascript - 任何动态加载 Angular Directive(指令)的方法?

标签 javascript angularjs

这是一个 fiddle :

http://jsfiddle.net/aSg9D/

基本上,<div data-foo-{{letterA}}></div> 都不是也不<div data-ng:model="foo-{{letterB}}"></div>被插值。

我正在寻找一种动态加载多个内联模板之一的方法。

如果之前已经有人问过这个问题,请原谅我,但我搜索了一下却找不到。


我相信 Radim Köhler 的答案是正确的。就在发布之前,我把一些东西拼凑在一起,从另一个指令中加载指令,如下所示:

angular.module('myApp', []).directive('loadTmpl', function($compile) {
    return {
        restrict: 'A',
        replace: true,
        link: function($scope, $element, $attr) {
            $element.html("<div data-card-"+$attr.loadTmpl+"></div>");
            $compile($element.contents())($scope);
        }
    };
});

和:

<div data-load-tmpl="{{directiveName}}"></div>

我认为这是极简主义的方法,但它可能有问题,所以请看下面的答案。

最佳答案

让我们这样调整它(更新的 fiddle )。观点:

<div my-selector name="letterA"></div>
<div my-selector name="letterB"></div>

Controller :

function myCtrl($scope) {
    $scope.letterA = 'bar';
    $scope.letterB = 'baz';
}

这是新指令 mySelector,包含选择器

.directive('mySelector', 
  [       '$templateCache','$compile', 
  function($templateCache , $compile) {
    return {
      scope: {
        name: '='
      },
      replace: true,   
      template: '',            
      link: function (scope, elm, attrs) {

        scope.buildView = function (name) {
            var tmpl = $templateCache.get("dir-foo-" + name);
            var view = $compile(tmpl)(scope);
            elm.append(view);
        }
      },
      controller: ['$scope', function (scope) {
        scope.$watch('name', function (name) {
            scope.buildView(name);
        });
      }],          
    };
}])
.run(['$templateCache', function ($templateCache) {
    $templateCache.put("dir-foo-bar", '<div data-foo-bar></div>');
    $templateCache.put("dir-foo-baz", '<div data-foo-baz></div>');
}])

如果你喜欢它,所有学分都转到 Render a directive inside another directive (within repeater template)AngularJS - Directive template dynamic ,如果你不这样做,请怪我。

关于javascript - 任何动态加载 Angular Directive(指令)的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21200974/

相关文章:

javascript - 从元素 : angularjs 动态取消绑定(bind) ng-click

javascript - AngularJS modulerr 放在 promise 中时

javascript - ng-repeat 仅适用于尖括号 ("<>"之外的变量 {{ x }} )?

javascript - 如何在 div 标签内显示 jquery 验证消息

javascript - 如何确定 JavaScript 中元素中的点击位置?

javascript - 使用 Rangy 保存位置时,插入符号在 Firefox 中消失

javascript - 在服务中更改参数后的 Angular 渲染 View

javascript - AngularJS 修改指令模板中的范围

javascript - 只有在设置了另一个同意 cookie 和 "true"之后,如何设置 Google Analytics cookie?

javascript - 无法插入将 $scope 变量传递到 Angular 过滤器时出现的错误