Javascript ng如果=”的话;“真的”+;数据ng如果=”的话;“真的”;计算结果为假?

Javascript ng如果=”的话;“真的”+;数据ng如果=”的话;“真的”;计算结果为假?,javascript,angularjs,Javascript,Angularjs,事实上,如果使用angularJS+1.6在html元素中使用ng if=“truthyValue”和data ng if=“truthyValue”,受影响的元素将不会在DOM中呈现。即使将ng if和data ng if与布尔值一起使用,这也是正确的 有人知道为什么会发生这种情况吗?因此,在使用Angular 1.6.5进行实验之后,它看起来工作得很好 无论如何,您不应该在同一个元素上同时使用数据ng if和ng if。坚持其中一个 <div ng-app="myApp">

事实上,如果使用angularJS+1.6在html元素中使用
ng if=“truthyValue”
data ng if=“truthyValue”
,受影响的元素将不会在DOM中呈现。即使将
ng if
data ng if
布尔值一起使用,这也是正确的



有人知道为什么会发生这种情况吗?

因此,在使用Angular 1.6.5进行实验之后,它看起来工作得很好

无论如何,您不应该在同一个元素上同时使用数据ng if和ng if。坚持其中一个

<div ng-app="myApp">
  <div ng-controller="MyCtrl">
    <div ng-if="false">hello there</div>
    <div ng-if="true">whats up</div>
  </div>
</div>

var myApp = angular.module('myApp', []);
myApp.controller('MyCtrl', ['$scope', function($scope) {


}]);

你好
怎么了
var myApp=angular.module('myApp',[]);
控制器('MyCtrl',['$scope',函数($scope){
}]);
这是一个密码笔:

这种行为不仅见于ng if,也见于其他角度指令,如ng repeat。当然,删除其中一个声明会立即修复错误

下面是一个不起作用的示例,同时使用
ng repeat
data ng repeat

这个答案引用了AngularJS的多句话


原因是编译了AngularJS HTML模板:

对于AngularJS,“编译”意味着将指令附加到HTML以使其具有交互性

在编译过程中,模板指令会经历一个称为规范化的过程,该过程涉及将HTMLs不区分大小写的名称更改为AngularJS中使用的camelCase名称,这遵循以下过程:

  • 从元素/属性的前面剥离
    x-
    数据-
  • -
    分隔的名称转换为大小写
  • 在此过程之后,您可以看到将两个
    ngIf
    指令附加到同一HTML元素,然后这些指令会相互干扰(它适用于两次出现的
    ng if
    而不是
    ng if
    data ng if
    的原因是,如果有两个
    ng if
    到达AngularJS编译器,则您的web浏览器会丢弃其中一个
    ng if



    因此,避免这种情况发生的解决方案是不要在HTML中使用多个AngularJS规范化为同一事物的指令。

    有趣。为那些想尝试的人重新编写:但无论如何,你为什么要这样做?
    ng if
    data ng if
    是表达同一事物的两种方式。我不想这样做,不是出于目的当然,但是我做得不对,我真的想知道为什么会发生这种情况,这样我就可以更多地了解这个框架。有趣的是,你也可以使用
    ng attr data ng if=“true”
    和chain
    ng attr
    s,所以
    ng attr ng attr ng attr ng if=“true”
    同样有效谢谢你的回答,但这并不是我无法修复的错误,这只是我想理解的一种奇怪行为。我知道。我只是向你展示如何使用它,使其有效。我同意你的观点,即“仅为真”不起作用很奇怪。显然有人认为我的答案不够好,并投了反对票!我想是的你被否决了,因为你不关心主要问题的事实。