2016-11-15 6 views
0

$scope.true = false;と設定すると、trueを参照するAngular式はfalseと評価されます。同様に、$scope.false = true$scope.undefined = trueでも同様の結果が得られると思います。

脇に名前を付けると、なぜこれらの機能がないのですか?角度コードでは、$scopeプロパティが参照されるかどうかが決まりますか?

var myApp = angular.module('myapp', []); 
 

 
myApp.controller('myctrl', function($scope) { 
 

 
    $scope.foo = "bar"; 
 
    
 
    $scope.true = false; 
 
    $scope.true2 = false; 
 
    
 
    $scope.false = true; 
 
    $scope.false2 = true; 
 
    
 
    $scope.undefined = true; 
 
    $scope.undefined2 = true; 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myapp" ng-controller="myctrl"> 
 
    <p>{{ foo }}</p> 
 
    <div ng-show="true"> 
 
    $scope.true is equal to false here. ng-show should hide this. 
 
    </div> 
 
    <div ng-show="true2"> 
 
    $scope.true2 is equal to false here. ng-show hides this. 
 
    </div> 
 
    <div ng-hide="false"> 
 
    $scope.false is equal to true here. ng-hide should hide this. 
 
    </div> 
 
    <div ng-hide="false2"> 
 
    $scope.false2 is equal to true here. ng-hide hides this. 
 
    </div> 
 
    <div ng-hide="undefined"> 
 
    $scope.undefined is equal to true here. ng-hide should hide this. 
 
    </div> 
 
    <div ng-hide="undefined2"> 
 
    $scope.undefined2 is equal to true here. ng-hide hides this. 
 
    </div> 
 
</div>

答えて

1

だけ簡単に見てましたが、これは角度のパーサは「リテラル」として考えるものに関係しています。角度パーサーは、式を個々のトークンに分割し、抽象構文ツリーを構築します。基本的には、トークンが何であるか把握するためのリテラルのマッピングに対してチェックが行われます。

var literals = { 
    'true': true, 
    'false': false, 
    'null': null, 
    'undefined': undefined 
    }; 

あなたはここで、パーサコードの詳細を見ることができます:https://github.com/angular/angular.js/blob/master/src/ng/parse.js

を、私はあなたが(離れて皆を混乱から)偽としてtrueを参照して達成しようとしているのかわからないのですが、次のことができるようにすべきです$parseProvider.addLiteral(name, value)

あなたはまた、構文としてのコントローラを使用することによってこの問題を回避できます:

<div ng-controller="ctrl as vm"> 
... 
<span ng-if="vm.false">Is shown</span> 
... 
</div> 
... 
function Ctrl() { 
    this.false = true; 
} 
+1

解析プロバイダを使用してリテラル値をカスタマイズ私はこれを決してコード化しないが、ボンネットの下で起こっていたことを理解したかった。あなたの説明はまさに私が探していたものでした。ありがとう! – adamdport

関連する問題