Javascript AngularJS使用ng click=";生成HTML模板;功能(arg)";

Javascript AngularJS使用ng click=";生成HTML模板;功能(arg)";,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我试图从AngularJS指令生成一个HTML模板,但我无法将任何对象传递到生成的元素中的函数中。这是我的指示: app.directive('listObject', function($compile){ return { scope : { obj : "=" }, controller: "httpPostController", link : function(scope, element) { scope.elementT

我试图从
AngularJS指令
生成一个HTML模板,但我无法将任何对象传递到生成的元素中的函数中。这是我的指示:

app.directive('listObject', function($compile){
  return {
    scope : {
      obj : "="
    },
    controller: "httpPostController",
    link : function(scope, element) {

      scope.elementTree = null;

      //recursivly generate the object output
      scope.printObject = function (field, content) {
        if (field){
          content = "<div>"
          if (field.isRequired){
            content += "<p>" + field.name + "*:</p>";
          } else {
            content += "<p>" + field.name + ":</p>";
          }

          if (field.isEnum){
            content += '<select ng-model="createEntityResource[field.name]" ng-change="getCreateEntityAsText()" class="form-control">' + 
                       '<option></option>' +
                       '<option ng-repeat="enumValue in field.enumValues" label={{enumValue.name}}>{{enumValue.ordinal}}</option>' +
                       '</select>';
          } else if (field.restResourceName) {
            content += '<button type="button" ng-click="loadResourceFieldsForField(field)">Create new</button>';
            //                           content += "<p>"+i+""+scope.printObject(field)+"</p>";
          } else {
           content += '<input type="text" ng-model="createEntityResource[' + field.name + ']" ng-change="getCreateEntityAsText()"' + 
                      'class="form-control" placeholder="{{parseClassName(field.type)}}">';
          }
          content+="</div>";
          return content;
        }

      };

      scope.refresh = function (){
        if(scope.elementTree){
          scope.elementTree.remove();   
        }
        //generate the html into a string
        var content = scope.printObject(scope.obj, content);
        //make elements out of a string
        scope.elementTree = angular.element(content);
        compiled = $compile(scope.elementTree);
        element.append(scope.elementTree);
        compiled(scope);
      };

      scope.refresh();

    }
  };
});
但这似乎不起作用,AngularJS认为[Object]被传递给函数

p.p.S.我还试图根据文件说明:

通常需要通过 表达式和父作用域,这可以通过传递映射来完成 将局部变量名称和值的。对于 例如,如果表达式是increment(amount),那么我们可以指定 块引用 通过将localFn调用为localFn({amount:22})来获取amount值

看起来是这样的,但是
字段
仍然没有定义:

'<button type="button" ng-click="loadResourceFieldsForField({field: field})">Create new</button>';
“创建新的”;

所以我的
printObject
算法非常有效:)

字符串中的
字段
属性对方法中的参数
字段
没有任何引用。 在
$compile
:angularjs将搜索范围内的变量
字段
,但不会找到任何变量

您必须将此字段放置在范围中,以使其作为aspected工作。但在那里,这似乎不是一件容易的工作

我想试试这个:


在每个
printObject
中,都有一个包含
字段的变量。

为它创建一个提琴…为什么不使用模板或tmplateUrl选项?
'<button type="button" ng-click="loadResourceFieldsForField({field: field})">Create new</button>';
`<button type="button" ng-click="loadResourceFieldsForField(' + field + ')">Create new</button>`
`<button type="button" ng-click="loadResourceFieldsForField({field: field})">Create new</button>`