当我阅读角js文档时,我遇到了与使用ng-model
与指令(如ng-include
、ng-switch
和ng-view
.The )有关的问题,提到的原因是child scope
和parent scope
,但我无法完全理解。
还有人提到,通过遵循“总是有一个‘”的“最佳实践”,可以很容易地避免原语的问题。在你的ng-model
里。
这是链接
有人能用不太专业的语言解释一下吗?
发布于 2016-01-19 16:35:28
ng-include
、ng-switch
和ng-if
创建子范围。这意味着如果你
<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
属性。
主计长:
$scope.model = {};
Html:
<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-include
,ng-switch
)和内部。
<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://stackoverflow.com/questions/34878732
复制相似问题