angularjs - 指令 - 在一个指令上确定哪个指令由examine属性运行

时间:2014-03-31 15:17:04

标签: angularjs-directive

目标:连续运行2个指令,第二个指令将由第一个指令输出确定

问题:动态执行。

我想制定一个核心指令:

<div field-directive="textbox" field-model="SomeModel"/>

在核心指令中我想使用模板返回类似的内容:

<div >
                       <div>
                            <div >
                                {{fieldModel.Title}}:
                            </div>
                            <div>
                                <div ng-model="fieldModel.Value" textbox />
                            </div>
                       </div>
                   </div>

问题我无法弄清楚如何在模板中写出属性field-directive的值textbox,我需要它,因为我希望在输出上运行另一个指令这个。 我的指示:

myapp.directive('fieldDirective', function()

    {
        replace : true,
        scope : {
            fieldModel: "=",
            fieldDirective: "="
        },
        link: function (scope, element, attr) {
            element.html(element.html().replace("field-directive", attr.fieldDirective));
        }
        template: 
        '<div ng-show="fieldModel.IsRelevant">\
                       <div>\
                            <div class="fieldTitle">\
                                {{fieldModel.Title}}:\
                            </div>\
                            <div>\
                                <div ng-model="fieldModel.Value" fieldDirective />\
                            </div>\
                       </div>\
                   </div>';
    }

1 个答案:

答案 0 :(得分:0)

仅针对其他人会遇到类似问题的情况: 我的解决方案是在链接函数上编写这些数据,然后使用类似的编译函数:

myapp.directive('fieldDirective',['$compile', function(compile)

{
  return{
    replace : true,
    scope : {
        fieldModel: "=",
        fieldDirective: "="
    },
    link: function (scope, element, attr) {

          var strTemplate  =('<div ng-show="fieldModel.IsRelevant"><div><div class="fieldTitle">{{fieldModel.Title}}:</div><div><div ng-model="fieldModel.Value" placeHolder /></div></div></div>').replace("placeHolder", attr.fieldDirective);
          var e = angular.element(strTemplate);
        compile(e.contents())(scope);
        element.replaceWith(e);


    },
             }
}]
);