首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AngularJS :ng模型的正确使用

AngularJS :ng模型的正确使用
EN

Stack Overflow用户
提问于 2016-01-19 13:58:11
回答 1查看 59关注 0票数 0

当我阅读角js文档时,我遇到了与使用ng-model与指令(如ng-includeng-switchng-view.The )有关的问题,提到的原因是child scopeparent scope,但我无法完全理解。

还有人提到,通过遵循“总是有一个‘”的“最佳实践”,可以很容易地避免原语的问题。在你的ng-model里。

这是链接

有人能用不太专业的语言解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-19 16:35:28

ng-includeng-switchng-if创建子范围。这意味着如果你

代码语言:javascript
运行
复制
<div ng-controller="MyCtrl">
  <div id="innerDiv" ng-if="!something">
    <input ng-model="model">
  </div>
</div>` 

model将在#innerDiv创建的作用域中创建(因为使用ng-if)。如果要在控制器中使用model值,可能会出现问题,因为这是不可能的(父作用域无法访问子作用域的属性!)。

解决方案是在$parent.model中使用<input ng-model="model">。然后,该属性将在父级范围内更改,这是您通常希望实现的。

然而,使用$parent可能对某些人不利,所以更好的解决方案是在控制器中创建一个命名的模型。您可以使用它并遵循“在您的ng-模型中始终有一个.”的规则。ng-if创建的子范围可以访问parrent作用域,因此他可以使用已经定义的$scope.model并更改$scope.model.text属性。

主计长:

代码语言:javascript
运行
复制
$scope.model = {};

Html:

代码语言:javascript
运行
复制
<div ng-controller="MyCtrl">
   <div id="innerDiv" ng-if="!something">
     <input ng-model="model.text">
   </div>
</div>`

(但请记住,如果您没有在控制器中定义$scope.model,它的行为将与第一个示例中的行为类似)。

如果您不确定您是否在相同的作用域中,可以通过显示作用域的$id来检查它。只需将html {{$id}}添加到ng-if (或ng-includeng-switch)和内部。

代码语言:javascript
运行
复制
<div ng-controller="MyCtrl">
   scope id: {{$id}}
   <div id="innerDiv" ng-if="!something">
     child scope id:{{$id}}
   </div>
   <div>scope id again {{$id}}</div>
</div>`

一些例子:https://jsfiddle.net/La90btfh/3/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34878732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档