如何将指令控制器中定义的作用域变量解析为在角度js中的指令模板中使用的另一个指令

时间:2015-03-12 21:21:37

标签: angularjs angularjs-directive

这是我想要做的事情:

(function () {
'use strict';

var sampleApp = angular.module('sample');
sampleApp.directive('myDirective', sampleAppDirective);

function sampleAppDirective () {
    sampleAppDirectiveController.$inject = ['$scope', '$http', '$attrs', '$element', '$compile', '$log'];

    return {
        restrict : 'EA',
        controller : sampleAppDirectiveController,
        templateUrl : 'partials/sample.html'
    };

    function sampleAppDirectiveController ($scope, $http, $attrs, $element, $compile, $log) {
             $scope.placeholderDir = 'my-other-directive';
    }
}})();

partials / sample.html中的模板如下所示

<div><div {{placeholderDir}}></div></div>

是否可以在myDirective contrroller

中将模板解析为类似的内容
    <div><div my-other-directive></div></div>

我想确保my-other-directive在呈现时也解析为它的模板。

请帮忙!

1 个答案:

答案 0 :(得分:2)

是的,但您需要查看$ compile服务。

基本上,您需要在指令中生成标记并使用$ compile服务进行编译。

您可以在链接功能中执行以下操作:

link: function($scope, $element) {
    $compile($element.contents())($scope);
}

虽然没有测试过。

您也可以从DDO中丢弃templateUrl并直接在您的元素中插入标记:

link: function($scope, $element) {
    $element.html('<div><div ' + $scope.placeholderDir + '></div></div>');
    $compile($element.contents())($scope);
}