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>