AngularJS:在ng-repeat之外使用ng-model

neu*_*rix 3 javascript angularjs angularjs-ng-repeat angular-ngmodel

在我的AngularJS应用程序中,我循环遍历数组对象并将值作为值发送到无线电输入.总体思路是用户选择一个单选框,并将值作为$ routeParams的一部分.不幸的是,变量{{ modelSelected }}在ng-repeat之外似乎不可用.为什么?第一个从不显示变量{{ modelSelected }}.

AngularJS是否在ng-repeat中创建了ScopeChild?

链接到我的jsfiddle示例

<html ng-app>
    <body ng-init="models = [{name:'Sam'},{name:'Harry'},{name:'Sally'}]">
        <h3> Selected {{ modelSelected }} shown outside paragraph</h3>

        <div ng-repeat="model in models">
            <p>{{ model.name }} -
                <input ng-model="modelSelected" type="radio" name="patient" value="{{ model.name }}" required>
            </p>
             <h3> Selected {{ modelSelected }} shown inside paragraph</h3>

        </div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

PSL*_*PSL 6

处理基元或使用绑定时,通常尝试在绑定.的模型属性中使用a .因此,当创建子范围时,原型继承将向下传递属性(它们是引用类型).($parent几乎总是使用被视为黑客攻击).在您的情况下,该属性modelSelected是一个原语(即使它存在于父作用域中)并ng-repeat创建一个子作用域,该作用域找不到此属性(因为继承不会将其降低,即使它存在)并创建一个新属性它的范围,因此对其进行的更改不属于外部范围.

在作用域中初始化作用域上的属性,selection={}在您的作用域中(在您的示例中,它将是outerscope).并将模型绑定为ng-model="selection.modelSelected

例如: -

<body ng-init="models = [{name:'Sam'},{name:'Harry'},{name:'Sally'}]; selection={}">
        <h3> Selected {{ selection.modelSelected }} shown outside paragraph</h3>

        <div ng-repeat="model in models">
            <p>{{ model.name }} -
                <input ng-model="selection.modelSelected" type="radio" name="patient" value="{{ model.name }}" required>
            </p>
             <h3> Selected {{ selection.modelSelected }} shown inside paragraph</h3>

        </div>
 </body>
Run Code Online (Sandbox Code Playgroud)

演示

阅读:了解范围

  • 我更喜欢使用`$ parent`.这是更好的做法,你不会遇到`$ parent.$ parent.$ parent`来获取你想要的范围内的变量. (3认同)