【发布时间】:2023-03-21 17:24:01
【问题描述】:
关于forms-angular项目的问题。
序言
forms-angular 的默认formInput 指令可以通过在扩展猫鼬模型中指定form.directive 属性被自定义指令覆盖,
var CategorySchema = new Schema({
name: String,
});
var PlansSchema = new Schema({
categories: {
type: [CategorySchema],
form: {
directive: 'plan-categories'
}
}
});
自定义 plan-categories 指令有一个模板,可以在其中编辑 [CategorySchema] 的字段。
什么工作
让我们从第一个简单的模板开始:
<div>
<div ng-repeat="category in record.categories">
<input ng-model="category.name" />
</div>
</div>
Forms-angular 可以成功检测绑定到数据的这些自定义 plan-categories 指令输入字段(注入的 scope.record)中的更改。特别是当用户改变上述输入字段的值时,页面的“保存”按钮被启用,允许保存操作。
由于在父 formInput 的 BaseCtrl 范围 false === $scope[$scope.topLevelFormName].$pristine 中进行了以下比较,保存按钮的激活(参见 base.js)。
不工作
现在,当使用表达式或 ng-click 调用的函数更改 category.name 变量时,保存按钮不会启用,如下所示:
<div>
<div ng-repeat="category in record.categories">
<input ng-model="category.name" />
<button ng-click="category.name = 'Hello'">Edit</button>
</div>
</div>
单击按钮时,category.name 变量似乎已正确更改,因为输入中的值已相应更改。不幸的是,“保存”按钮一直处于禁用状态。
注意:我还尝试将方法传递给 ng-click (从自定义指令的 link 方法中注入的范围)并在 $timeout 调用中设置 category.name 变量,但未成功。
我猜输入字段的ng-model 指令调用了父级的(多祖先?)$setDirty() 方法。
问题
- 我如何神奇地获得由 forms-angular 调用的 $setDirty() 以启用“保存”按钮
如果不可能:
- 如何在更改
record.categories元素时访问 BaseCtrl 范围并调用 $setDirty()?
【问题讨论】:
标签: angularjs angularjs-directive mongoose