使用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如果这样可以让事情变得更容易。
由于