Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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 $scope内部和外部ng include的行为不同_Javascript_Angularjs - Fatal编程技术网

Javascript $scope内部和外部ng include的行为不同

Javascript $scope内部和外部ng include的行为不同,javascript,angularjs,Javascript,Angularjs,因此,我做了一些实验,在两个不同的selectbox上创建一个ng更改行为,同时使用相同的$scope。一个在ng include指令内部,另一个在ng include指令外部,有趣的是,当我实现数据绑定时,结果是可以的,但是当我尝试查看控制台选项卡时,返回的结果不同 ng include指令外部的一个可以,而ng include指令内部的一个总是返回值“a”或静态值 这是index.html模型 <select ng-model="list" ng-change="changeOut

因此,我做了一些实验,在两个不同的selectbox上创建一个ng更改行为,同时使用相同的$scope。一个在ng include指令内部,另一个在ng include指令外部,有趣的是,当我实现数据绑定时,结果是可以的,但是当我尝试查看控制台选项卡时,返回的结果不同

ng include指令外部的一个可以,而ng include指令内部的一个总是返回值“a”或静态值

这是index.html模型

  <select ng-model="list" ng-change="changeOutsideTemplate()">
    <option value="a">A</option>
    <option value="b">B</option>
  </select>

  {{list}}

  <div ng-include="test"></div> //this scope caries test.html
<select ng-model="list" ng-change="changeInsideTemplate()">
  <option value="a">A</option>
  <option value="b">B</option>
</select>

{{list}}
这是工作时间


你认为这个问题的原因是什么?有人想详细说明吗?

ng include
指令创建一个新的子作用域。 这是你的电话号码

当您在
ng include
html中的模型作为
时,angular将检查其子范围中的模型
列表
,然后angular将意识到
ng include
子范围中没有名为
列表
模型。然后angular将在子范围内创建一个名为
list
的新子范围模型

如果你喜欢

<select ng-model="$parent.list" ng-change="changeInsideTemplate()">
index.html

include.html中

<div ng-include="$parent.include"></div> // because `$scope.include` in parent scope
<select ng-model="$parent.$parent.list" ng-change="otherChanging()"> // because `$scope.list` is in parent scope of parent scope (second upper parent scope).
//因为“$scope.list”在父作用域(第二个上父作用域)的父作用域中。
下面是使用$parent的示例

这是正在使用的对象


使用对象更合适。

这是正确的。或者更好的解决方法是使用
$scope.list={value:'a'}
更好和
ng model=“list.value”
。上帝既然你提到了它,我就可以在文档中看到指令信息了。。哇,很有趣,所以这就是为什么它没有像预期的那样工作。。谢谢你的解释,我现在明白了!顺便说一句,如果情况是这样的呢?这是解决办法。第二种方法更适合使用它。本例使用的是
$parent
;因此,基本上每个ng包含都被添加了,新的子范围也被添加了。。但是如果使用list.value,则该方法比使用$parent.list的方法更合适。我认为$parent.list。。。我现在明白了。。谢谢你们!和你们讨论很有趣。。
<select ng-model="list.value" ng-change="changeOutsideTemplate()">
<select ng-model="list.value" ng-change="changeInsideTemplate()">
<div ng-include="$parent.include"></div> // because `$scope.include` in parent scope
<select ng-model="$parent.$parent.list" ng-change="otherChanging()"> // because `$scope.list` is in parent scope of parent scope (second upper parent scope).