Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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/2/image-processing/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
AngularJS ng if和作用域_Angularjs_Angular Ng If - Fatal编程技术网

AngularJS ng if和作用域

AngularJS ng if和作用域,angularjs,angular-ng-if,Angularjs,Angular Ng If,我试图理解ng if和范围。正如我所知,ng if创建了一个新的子作用域。这是我的问题: 看法 如果someCondition设置为true,则someValue2应与someValue1相同 我的问题是,在这两种情况下(对或错),我都无法访问someValue2。如何实现这一点?据我所知,ng if纯粹是一个显示级语句。在给定特定值的情况下,可以使用它使某些元素可见/不可见,但我认为它不会创建任何类型的范围。HTML代码将要做的是切换辅助输入的可见性 如果希望在“someCondition”在

我试图理解ng if和范围。正如我所知,ng if创建了一个新的子作用域。这是我的问题:

看法

如果someCondition设置为true,则someValue2应与someValue1相同


我的问题是,在这两种情况下(对或错),我都无法访问someValue2。如何实现这一点?

据我所知,ng if纯粹是一个显示级语句。在给定特定值的情况下,可以使用它使某些元素可见/不可见,但我认为它不会创建任何类型的范围。HTML代码将要做的是切换辅助输入的可见性

如果希望在“someCondition”在false和true之间变化时将值2切换为等于值1,则可以使用$watch进行如下操作:

$scope.$watch(someCondition, function(){
  if (someCondition){
    $scope.someValue1 = $scope.someValue2
  }
})

ngIf
确实使用原型继承创建了一个新的作用域。这意味着
ngIf
的范围的原型对象是其父范围的原型对象。因此,如果在其作用域的
ngIf
实例上找不到该属性,它将在其prototype objects链中查找该属性。但是,一旦将属性指定给作用域的实例,它将不再查看该属性的继承链。这里有一个链接解释JS中使用的原型继承:

如何解决这个问题:

父控制器:

$scope.data = {someValue: true};
$scope.data.someValue = false
子控制器:

$scope.data = {someValue: true};
$scope.data.someValue = false
因为您没有在其父对象的作用域上隐藏属性,您只是在其父对象的作用域上修改对象,这确实会改变父对象的数据对象。因此,在你的情况下:

<input ng-model="data.someValue1" />
<div ng-if="!data.someCondition">
    <input ng-model="data.someValue2" />
</div>

是,
ng如果创建新的子作用域

要在
ng if
中查看模型属性,经验法则是:

不要将作用域用作模型

e、 g

在ng模型中使用对象属性-然后,即使
ng如果
创建了新的子范围,父范围也会有更改


要查看正在工作的Plunker,请查看此处:

在angular中,您永远不能直接修改$parent properties值。但是,您可以修改$parent properties的属性,否则将中断继承。执行:
$parent.someValue.num=10
,不执行:
$parent.someValue=10
不以任何方式备份此语句。修改
$parent
属性似乎效果很好。顶部的“此处已回答”问题有一个答案,解释了修改
$parent
属性是如何工作的,即使有一些可视化,它清楚地显示了它的工作原理。一个问题是,当添加更多条件和
ng if
s或创建一些其他子作用域时,可能会有一个较长的
$parent
s链,并且代码中断,这与使用对象时不同。实际上,在使用这些对象时,您甚至不需要
$parent
,只需使用
$scope
$scope.someValue.num=10
。谢谢您的评论。我的情况也在范围之内,所以我不认为我需要看它。ngIf与ngShow、ngHide的不同之处在于它不仅仅隐藏html元素。它完全摧毁了它。它确实使用原型继承创建了一个新的作用域@user2734679好家伙,谢谢你的链接!我每天都会学到一些关于Angular的新知识:-)如果
有自己的作用域,这个答案应该被删除
ng,控制器中的
$watch
不会看它,除非你将它用于具有
ng if
作用域的指令。我会深入研究它,谢谢:)用户2734679你能给我另一个解释吗?具有某个值的某些值。不幸的是,我还是不明白。这不是一个有棱角的东西。这是一个javascript的东西。这里有一些原型遗传的例子。应该有联系吗?为什么这样做?
$scope
someObject
都只是对象,对吗?是什么使某个对象不同?我打算在我的项目中将其命名为
scope
,而将
$scope
scope
同时命名似乎相当愚蠢。我在最顶端查看了“这里已经回答”的问题,其答案提供了一些见解:)
ng-if='showStuff' //here my scope is model **INCORRECT**
ng-if='someObject.showStuff' // ** CORRECT **