Javascript 如何在我的案例中正确显示和隐藏元素
我有一个奇怪的问题,关于不露面 我有点像Javascript 如何在我的案例中正确显示和隐藏元素,javascript,html,angularjs,Javascript,Html,Angularjs,我有一个奇怪的问题,关于不露面 我有点像 <ul> <li ng-repeat="item in items" > <a ng-click="showNew =! showNew">{{item.text}} <span ng-show="showNew">New Items!</span> </a> </li> <li ng-
<ul>
<li ng-repeat="item in items" >
<a ng-click="showNew =! showNew">{{item.text}}
<span ng-show="showNew">New Items!</span>
</a>
</li>
<li ng-show="showNew">
<a >Category 1 </a>
</li>
</ul>
-
{{item.text}
新项目!
-
第一类
由于某些原因,只有“
新项目当我单击a
标记时,会显示“code>”。第一类永远不会出现。我认为showNew在我的案例中的所有方面都是一样的。我如何解决这个问题?非常感谢 您可以使用ng init在模板的更高层创建变量,这应该会有所帮助。这不是一个理想的解决方案,但如果您不想编辑其他文件,它会很快很容易
编辑:你将需要在你的模型中使用点符号,这样角度范围魔术就可以工作了。(这是$scope.nested={showNew:false}的等价项
<ul ng-app ng-init="nested.showNew=false">
<li ng-repeat="item in [1,2,3]" >
<a ng-click="nested.showNew =! nested.showNew">{{$index}}
<span ng-show="nested.showNew">New Items!</span>
</a>
</li>
<li ng-show="nested.showNew">
<a >Category 1 </a>
</li>
</ul>
-
您正在更改ngRepeat
创建的新作用域上的布尔属性。有几种方法可以解决此问题(我在这里列出了3种可能的解决方案:)。最好的解决方案可能是有一个对象(例如scope.itemsParams={isVisible:false}
)或者类似的东西,并使用,例如ng show=“itemsParams.showNew”
。这样,它们都通过引用引用相同的itemsParams
对象,都可以观察到相同的isVisible
属性。这不起作用。这里证明:,使用相同的ngInit
格式。问题是ngRepeat
为每个项目创建一个新的范围
对象,并在父对象作用域的属性。如果这些是基元(数字、字符串、布尔值),则当项目更改时,父对象的值也不会更新。如果您引用的是更复杂的对象,则可以按值复制,因为它只是对对象的引用(而不是基元中的实际值)。更改其属性将从两个方面反映出来。下面是切换到对象的同一个示例:抱歉,忘记了明显的问题。如果使用点表示法,它将起作用(但正如我所说的,这是一个解决方案,而不是解决方案,需要操作代码的其余部分来正确地执行此操作,并减少黑客行为)@DRobinsonYep。这会起作用。如果控制器中定义了$scope.nested
,则您将遇到问题。通过$parent
访问(例如:ng click=“$parent.showNew=!$parent.showNew”
)会感觉更安全,并且需要更少的样板文件,尽管我也不能推荐该解决方案。如下所示: