Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJs避免范围界定问题_Javascript_Angularjs_Data Binding_Angular Ngmodel - Fatal编程技术网

Javascript AngularJs避免范围界定问题

Javascript AngularJs避免范围界定问题,javascript,angularjs,data-binding,angular-ngmodel,Javascript,Angularjs,Data Binding,Angular Ngmodel,我最近花了4个多小时才弄明白为什么我的ng model指令与ng options组合使用时没有正确绑定到控制器内的属性。正在正确初始化元素-从控制器(父)作用域接收值。但子作用域未正确更新父作用域。在检查了以下问题和掠夺之后,我能够为这个问题制定一个“解决方案”: 我发现我在元素中绑定到的属性绑定到了控制器子范围内的同名属性-因此,该值在控制器的范围内没有按预期反映出来。更换后 <select ng-options="asset as asset.Name for asset in

我最近花了4个多小时才弄明白为什么我的
ng model
指令与
ng options
组合使用时没有正确绑定到控制器内的属性。正在正确初始化
元素-从控制器(父)作用域接收值。但子作用域未正确更新父作用域。在检查了以下问题和掠夺之后,我能够为这个问题制定一个“解决方案”:

我发现我在
元素中绑定到的属性绑定到了控制器子范围内的同名属性-因此,该值在控制器的范围内没有按预期反映出来。更换后

<select ng-options="asset as asset.Name for asset in allAssets" ng-model="selectedAsset" ng-change="lookupAssetPermissions()"></select>

在这个场景中,除了有目的地绑定到父范围之外,我还有其他选择吗?如果我有多个子作用域(嵌套的
ng If
语句),我是否需要更改
ng model
以绑定到
$parent.$parent.$parent….selectedAsset
,以更新我的控制器作用域中的值?在这个主题上有什么“最佳实践”吗?

将所有变量放在某个对象中,例如:

$scope.Model = {
  selectedAsset : 'mySelectedAsset1',
  selectedAsset2 : 'mySelectedAsset2',
  selectedAsset3 : 'mySelectedAsset3'
}
然后你可以:

<div ng-repeat> //new scope
<div ng-repeat> // new scope
<input ng-model="Model.selectedAsset">
//新范围
//新范围

这也降低了您对$scope的“依赖性”,定义这样的模型对象将向所有阅读您代码的人显示您的模型。

Clean。和功能。我以前见过这个解决方案,但不知道使用它的好处。谢谢。
$scope.Model = {
  selectedAsset : 'mySelectedAsset1',
  selectedAsset2 : 'mySelectedAsset2',
  selectedAsset3 : 'mySelectedAsset3'
}
<div ng-repeat> //new scope
<div ng-repeat> // new scope
<input ng-model="Model.selectedAsset">