Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 例如,自定义指令字段如何影响完整记录的$pristine状态?_Angularjs_Angularjs Directive_Mongoose - Fatal编程技术网

Angularjs 例如,自定义指令字段如何影响完整记录的$pristine状态?

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: {

与项目有关的问题

序言 通过在扩展mongoose模型中指定
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>