Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.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 如何在我的案例中正确显示和隐藏元素_Javascript_Html_Angularjs - Fatal编程技术网

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”
    )会感觉更安全,并且需要更少的样板文件,尽管我也不能推荐该解决方案。如下所示: