Angularjs 表格won';无法识别自定义输入指令

Angularjs 表格won';无法识别自定义输入指令,angularjs,Angularjs,我正在尝试创建一个系统来动态生成表单。我创建了一个指令,该指令从输入id查找有关输入字段的元数据,并为该字段生成模板。输入工作正常,但是表单无法识别它的存在。它没有考虑到表单的计算。$valid等等。编译和链接之间发生了什么神秘的事情,使得表单能够识别输入 以下是简化代码: 请参见以下内容: 作品: 破碎的: 表单有效:{{myForm.$valid} 应用程序控制器('MainCtrl',函数($scope){ $scope.model={ 作品:"作品",, 破碎的:'破碎', }; $s

我正在尝试创建一个系统来动态生成表单。我创建了一个指令,该指令从输入id查找有关输入字段的元数据,并为该字段生成模板。输入工作正常,但是表单无法识别它的存在。它没有考虑到表单的计算。$valid等等。编译和链接之间发生了什么神秘的事情,使得表单能够识别输入

以下是简化代码: 请参见以下内容:


作品:
破碎的:
表单有效:{{myForm.$valid}
应用程序控制器('MainCtrl',函数($scope){
$scope.model={
作品:"作品",,
破碎的:'破碎',
};
$scope.inputList=[
{id:'breaked'},
];
});
应用程序指令('myComponent',函数($compile){
返回{
限制:'E',
范围:{
“信息”:“=”
},
链接:函数($scope、$element、$attrs){
var html='';
$scope=$scope.$parent.$parent;
//^此破解使模型正常工作,但表单仍然未附加
var el=$compile(html)($scope);
$element.替换为(el);
}
};
});

你想到的神秘事物是“范围”。AngularJS“范围”是将模型、视图和控制器粘在一起的东西。在您发布的代码中,有3个不同的作用域需要考虑。“MainCtrl”范围。我们称之为“scope01”。“ng repeat”为每个迭代创建一个新的范围。由于数组中只有一个项,因此我们将其称为“scope02”。最后,您的指令有一个安全性。我们称之为“scope03”

指令中的变量需要遍历两个作用域才能返回到“MainCtrl”控制器scope01。这就是为什么你的黑客需要两个“$parent”呼叫。“myForm”对象位于“scope01”中。它将被“scope02”继承,但需要传递到“scope03”中。您需要通过双重绑定参数或使用事件“广播”对输入的更改来冒泡对“scope01”的更改

下面是一个使用参数和双绑定的示例:

<my-component info="inp" form-ref="myForm">

你想到的神秘事物是“范围”。AngularJS“范围”是将模型、视图和控制器粘在一起的东西。在您发布的代码中,有3个不同的作用域需要考虑。“MainCtrl”范围。我们称之为“scope01”。“ng repeat”为每个迭代创建一个新的范围。由于数组中只有一个项,因此我们将其称为“scope02”。最后,您的指令有一个安全性。我们称之为“scope03”

指令中的变量需要遍历两个作用域才能返回到“MainCtrl”控制器scope01。这就是为什么你的黑客需要两个“$parent”呼叫。“myForm”对象位于“scope01”中。它将被“scope02”继承,但需要传递到“scope03”中。您需要通过双重绑定参数或使用事件“广播”对输入的更改来冒泡对“scope01”的更改

下面是一个使用参数和双绑定的示例:

<my-component info="inp" form-ref="myForm">

我找到了解决方案,以防其他人遇到这种情况:

    var el = $compile(html)($scope.$parent, function(_el) {
      $element.replaceWith(_el);
    });

更新了

我找到了解决方案,以防其他人遇到这种情况:

    var el = $compile(html)($scope.$parent, function(_el) {
      $element.replaceWith(_el);
    });

更新的

这不是每个输入都会覆盖表单吗。$有效吗?是的,我主要只是展示了一个如何在作用域之间通信的示例。您可以访问表单对象。如何以及如何使用该访问权限取决于您。有很多方法可以剥除这只猫的皮肤。这不是让每个输入都覆盖表单吗。$valid?是的,我主要只是展示了一个如何在作用域之间通信的示例。您可以访问表单对象。如何以及如何使用该访问权限取决于您。有很多方法可以剥这只猫的皮。