Angularjs 例如,自定义指令字段如何影响完整记录的$pristine状态?
与项目有关的问题 序言 通过在扩展mongoose模型中指定Angularjs 例如,自定义指令字段如何影响完整记录的$pristine状态?,angularjs,angularjs-directive,mongoose,Angularjs,Angularjs Directive,Mongoose,与项目有关的问题 序言 通过在扩展mongoose模型中指定form.directive属性,forms angular的默认formInput指令可以被自定义指令覆盖 var CategorySchema = new Schema({ name: String, }); var PlansSchema = new Schema({ categories: { type: [CategorySchema], form: {
form.directive
属性,forms angular的默认formInput
指令可以被自定义指令覆盖
var CategorySchema = new Schema({
name: String,
});
var PlansSchema = new Schema({
categories: {
type: [CategorySchema],
form: {
directive: 'plan-categories'
}
}
});
自定义计划类别
指令有一个模板,可以在其中编辑[CategorySchema]
的字段
什么在起作用
让我们从第一个简单的模板开始:
<div>
<div ng-repeat="category in record.categories">
<input ng-model="category.name" />
</div>
</div>
单击按钮时,category.name变量似乎已正确更改,因为输入中的值已相应更改。不幸的是,“保存”按钮仍处于禁用状态
注意:我还尝试向ng传递一个方法(从自定义指令的链接方法中注入的范围)并在$timeout调用中设置category.name
变量,但未成功
我猜输入字段的ng model
指令调用了parent的(多祖先?)$setDirty()方法
问题:
- 如何神奇地让表单调用$setDirty(),以启用“保存”按钮
如果不可能:
- 在更改
记录.categories
元素时,如何访问BaseCtrl作用域并调用$setDirty()
我一时想不出一个神奇的解决方案,但绝对非神奇的方法是依赖$data.baseScope(请参阅),这样可以节省大量的$parents。在单击按钮时,$data.baseScope似乎没有定义。在指令链接方法中,执行console.log($data.baseScope)
是可以的(浏览器控制台延迟),但在同一位置执行$data.baseScope.$setDirty()
失败,因为$data.baseScope
未定义。通过查看BaseCtrl scope的setFormDirty()
代码,我可以使用element.inheritedData(“$formController”).$setDirty()
启用保存按钮,其中element是指令的link函数的参数。这听起来不错吗?似乎不错。我想不出会有什么变化来阻止它工作,而且它非常优雅,效率也不算太差。
<div>
<div ng-repeat="category in record.categories">
<input ng-model="category.name" />
<button ng-click="category.name = 'Hello'">Edit</button>
</div>
</div>