Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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
Javascript AngularJS:指令和转置指令之间的范围访问_Javascript_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

Javascript AngularJS:指令和转置指令之间的范围访问

Javascript AngularJS:指令和转置指令之间的范围访问,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我构建了一个模块化表单的小演示,其中包含单个输入指令。 它还具有表单值的预览,绑定到同一控制器和范围 导致问题的输入指令是表单中转包的输入: <mailer-form> <mailer-input form="mail" model="email"> <input class="form-control" placeholder="Email" ng-model="mail.email"> </mailer-input> </

我构建了一个模块化表单的小演示,其中包含单个输入指令。 它还具有表单值的预览,绑定到同一控制器和范围

导致问题的输入指令是表单中转包的输入:

<mailer-form>
  <mailer-input form="mail" model="email">
    <input class="form-control" placeholder="Email" ng-model="mail.email">
  </mailer-input>
</mailer-form>

<mailer-preview></mailer-preview>
问题是表单模板中的ng模型会更新父范围, 而转置的输入则没有。这就是为什么第一个电子邮件输入不起作用 其余的都是

如何使转置指令双向绑定


谢谢

ng TRACLUDE指令始终为转置内容创建新的子范围

这里有一个不创建新作用域的请求(),但它尚未实现

如果希望转出的内容与容器具有相同的作用域,可以使用链接()中的
transcludeFn
in,如下面的代码片段,而不是ng transclude

link: function(scope, element, attributes, controllers, transcludeFn){
  transcludeFn(scope, function(nodes) {
    element.find('.transclude-here').append(nodes);
  })
}
并替换这些

<div ng-transclude></div>
在html模板中:

 <div my-transclude></div>


那么问题是您看到两次电子邮件输入?我理解得对吗?这就是我所看到的一切,感谢您用transclusion runTarm澄清了范围情况。transclusion指令看起来是一种将其构建为可重用组件的可靠方法。
<div class="transclude-here"></div>
app.directive('myTransclude', function () {
  return {
    restrict: 'EAC',
    link: function(scope, element, attrs, controllers, transcludeFn) {
      transcludeFn(scope, function(nodes) {
        element.empty();
        element.append(nodes);
      });
    }
  };
});
 <div my-transclude></div>