Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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 角度1.6:ng模糊和ng焦点在ng repeat中的元素上不起作用_Angularjs_Angularjs Directive_Angularjs Ng Repeat - Fatal编程技术网

Angularjs 角度1.6:ng模糊和ng焦点在ng repeat中的元素上不起作用

Angularjs 角度1.6:ng模糊和ng焦点在ng repeat中的元素上不起作用,angularjs,angularjs-directive,angularjs-ng-repeat,Angularjs,Angularjs Directive,Angularjs Ng Repeat,所以我在应用程序中使用Angular 1.6。过去,使用ng click和ng focus在不同的元素上工作得很好。但是,我发现在ng repeat内使其工作时遇到困难 例如:使用ng repeat创建4个元素 <!DOCTYPE html> <html lang="en-US"> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></sc

所以我在应用程序中使用Angular 1.6。过去,使用
ng click
ng focus
在不同的元素上工作得很好。但是,我发现在
ng repeat
内使其工作时遇到困难

例如:使用ng repeat创建4个元素

<!DOCTYPE html>
<html lang="en-US">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body>
    <div ng-app="" ng-init="isFocus=true">
        <div ng-show="isFocus">
            <ul>
                <li ng-repeat="i in [1, 2, 3, 4]"><a href="" ng-blur="isFocus=false" >test</a></li>
            </ul>
        </div>
    </div>
</body>
</html>

这是行不通的。当我在某个元素上使用tab键或单击某个列表元素并离开时,
ng blur
应更改为false。它似乎可以做到这一点,但在不同的范围内。如果我打印出这些值,你可以看到它在休假时变为false。但是,它不会将其设置为页面的变量,因此div上的
ng show
现在为false并隐藏。您可以在创建的JSFIDLE上查看并试用它

我还创建了一个没有
ng repeat
的小提琴,注意标签或单击列表项,然后单击关闭
ng blur
开始,并像应该的那样将变量全局设置为false,ng show隐藏div,因为它是false

我希望ng blur和ng focus能够处理
ng repeat
中的项目,但是,从小提琴上可以看出,它似乎无法正常工作。当变量输出到项目旁边时,它似乎变为false。但是请注意,顶部的段落标记表示变量仍然设置为“true”,这就是div保持显示的原因,因为
isFocus
仍然等于true


我似乎不知道为什么会发生这种情况,也不知道如何应对这种情况,从而使Angular能够像第二把小提琴一样正常工作,而无需重复

此代码打破了Angular的基本规则之一。“在角度绑定中始终使用点(
)!。通过使用对象属性而不是基元,可以避免此冲突。在“断开”的代码中,您在每次迭代
ng repeat
时创建一个新的
isFocus
原语,导致链接只影响自身。在“固定”版本中,使用对象时,不会创建新对象,而是更新现有对象的属性。“坏”的代码并不是真的坏了;在某些情况下,为
ng repeat
的每次迭代创建一个原语可能非常有用,例如为单个链接创建一个
active
值。那么“ctrl”是我的实际控制器吗?这是一个很好的回答。我还是个新手,这解释了很多。我真的很感激。你能把它写下来作为答案吗?这样我就可以给你评分了?再次感谢!