Javascript AngularJS指令转移范围=false?

Javascript AngularJS指令转移范围=false?,javascript,html,binding,angularjs,Javascript,Html,Binding,Angularjs,如何防止指令与transclude一起创建新的作用域 这我不能绑定任何东西,由于新的范围与红色边框说明 Html: <div ng-app="components"> <input ng-model="var"> <block> 123 <input ng-model="var"> </block> </div> angular.module('components'

如何防止指令与transclude一起创建新的作用域

这我不能绑定任何东西,由于新的范围与红色边框说明

Html:

<div ng-app="components">
    <input ng-model="var">
    <block>
        123
        <input ng-model="var">
    </block>
</div>
angular.module('components', []).directive('block',function(){
    return{
        scope:false,
        replace:true,
        restrict:"E",
        transclude:true,
        template:'<div class="block" ng-transclude></div>',
        link:function(scope, el, attrs, ctrl){

        }
    }
});
.ng-scope{
  border:1px solid red;
    margin:10px;
}

这实际上是此处所述的预期行为(ng transclude创建子范围): 在此讨论:


您可以通过在作用域(obj.var)中的对象上设置一个成员来解决此问题,如下图所示:

尽管Angular团队不建议这样做,但另一个解决方法是显式调用转置部分中的$parent作用域:

<div ng-app="components">
    <input ng-model="var">
    <block>
        123
        <input ng-model="$parent.var">
    </block>
</div>

123

谢谢。我举了一个更简单的例子。但这是一个bug还是一个特性?这是子作用域的正常行为(它们通过原型从父作用域继承,这意味着您可以从父作用域读取,但一旦编写,它就在子作用域上-除非您在父作用域工作区上使用obj),您也许可以查看ng transclude指令的源代码,复制它并使用scope:false选项创建自己的代码。如果我开始使用transclude set as
元素
,问题又会出现。有人知道为什么现在不行吗。演示:为什么在对象上设置成员会绕过嵌套模板有自己的作用域这一事实?更清楚地说,嵌套模板如何在不调用$scope的情况下访问父作用域。$parent?