动态创建表单并创建范围变量

时间:2016-03-07 20:44:13

标签: javascript angularjs angularjs-directive angularjs-scope

使用AngularJs我试图动态创建一个使用ng-model的表单,但我一直收到错误:错误:[ngModel:nonassign] Expression' eb_app-name'是不可转让的。当我动态地说,我的意思是当加载页面时只存在表单标签,并且通过用户交互添加输入元素。

我已经在页面上显示了表单的基础知识。

<form class="form" method="post">
  <ul id="template" droppable></ul>
  <button class="btn btn-primary" type="submit">Create Template</button>
</form>

为简洁起见,我省略了一些属性。

使用拖放表单输入将被删除到页面上并添加到UL标记中。

<div class='input-group'>
    <span class='input-group-addon' id='eb_app-name'>Name:</span>
    <input type='text' ng-model="eb_app-name">
</div>

同样删除了一些属性。

拖放过程不会简单地将一个框从一个地方移动到另一个地方,当Drop发生时,使用以下代码将新元素添加到DOM(上面的HTML)中:

angular.element(document).injector().invoke(function ($compile) {

  var obj = $("#template");
  var objScope = obj.scope();

  obj.append(SOMEHTML);

  $compile(obj.contents())(objScope);
  objScope.$digest();
});

最后两行是因为SOMEHTML包含我需要采取行动的ng-include。完整档案在此处:https://github.com/githublemming/cloudprovisioning/blob/master/public/controllers/template_add.js

现在我是Angular的新手,我相信这个错误是因为ng-model(eb_app-name)中的值尚未在Controller的范围内声明。

由于应用程序的性质,新的小部件&#39;可以随时定义并添加到项目中,我不想硬编码可能的表单变量,并在创建新小部件时不断更新控制器。我想要做的是在将小部件添加到页面时以编程方式声明表单变量。

我尝试过scope[XXX] = "",但在调用objScope.$digest();行时收到错误。

我该怎么做?完整的代码可以在这里找到:https://github.com/githublemming/cloudprovisioning如果这样可以让事情变得更容易。

由于

0 个答案:

没有答案