2017-11-13 40 views
9

यदि मैं अपने Angular.js में टर्नरी ऑपरेटर का उपयोग करता हूं तो क्या यह प्रत्येक पाचन (जैसे कार्यों) पर निष्पादित किया जाएगा या केवल तभी निर्णय के लिए आवश्यक चर बदल दिए जाएंगे?क्या हर पाचन पर टर्नरी ऑपरेटर को निष्पादित किया जाएगा?

उदाहरण:

<div>{{ui.isTrue ? "foo" : "bar"}}</div> 

या:

<div ng-bind="ui.isTrue ? 'foo' : 'bar'"></div> 

उस पर क्रियान्वित किया जा चाहेंगे पचाने या केवल जब बदल ui.IsTrue है हर?

+0

पृष्ठ लोड होने पर इसे निष्पादित किया जाएगा और जब भी 'ui.isTrue' बदल जाएगा। –

+0

केवल अगर AnglarJS 'ui.isTrue' के बारे में पता है – Pureferret

उत्तर

1

मैं इस परीक्षण करने के लिए एक बेला बनाया खुद।

http://jsfiddle.net/xuvzzay8/4/

HTML:

<div ng-controller="MyCtrl">  
    {{bool ? ternaryTrue() : ternaryFalse() }}<br/> 

    {{bool}}<br/>   
    <button ng-click="bool = !bool">Toggle Bool</button> 
    {{a}} 
    <div style="background-color:red" ng-mouseover="hover()"> 
     Hover here to trigger digest 
    </div> 
</div> 

जे एस:

var myApp = angular.module('myApp',[]); 
function MyCtrl($scope) {  
    $scope.bool = true; 
    $scope.a = 0; 
    $scope.ternaryTrue = function(){ 
     console.log("ternary executed on true"); 
    } 
    $scope.ternaryFalse = function(){ 
     $scope.a++; //creates an infinite digest loop 
     console.log("ternary executed on false"); 
    }  
    $scope.hover = function(){ 
     console.log("Hover"); 
    } 
} 

नतीजा यह है कि त्रिगुट ऑपरेटर हर डाइजेस्ट पर निष्पादित किया जाता है।

संपादित करें: एक अनंत पाचन लूप आसानी से इसके साथ बनाया जा सकता है। जैसे ही $ स्कोप में कुछ फ़ंक्शन के दौरान बदल दिया जाएगा जिसे टर्नरी ऑपरेटर द्वारा बुलाया जाता है, एक और पाचन शुरू किया जाएगा जो टर्नरी ऑपरेटर के फ़ंक्शन को फिर से निष्पादित करता है।

5

AngularJS में, त्रिगुट ऑपरेटर सहित हर अभिव्यक्ति निष्पादित किया जाएगा:

  • सबसे पहले, जब पेज लोड।
  • और जब भी ui.isTrue परिवर्तक कोणीय ऐप scope में बदल जाता है।

आप angular scope documentation पर एक नज़र और डाटा मॉडल खंड के रूप में विशेष रूप से घेरा ले, तो आप उस देखेंगे:

स्कोप आवेदन नियंत्रक और दृश्य के बीच गोंद है। टेम्पलेट लिंकिंग चरण के दौरान निर्देशों ने दायरे पर $watch अभिव्यक्तियों की स्थापना की।

$watch अनुमति देता निर्देशों संपत्ति परिवर्तन, जो निर्देश डोम के लिए अद्यतन मूल्य रेंडर करने के लिए अनुमति देता है के लिए सूचित किया।

तो जब दृश्य में कोई संपत्ति बदलती है तो दृश्य हमेशा सूचित किया जाएगा, इसलिए टर्नरी अभिव्यक्ति का स्वचालित मूल्यांकन किया जाएगा।

4

यहाँ उदाहरण है कि आप क्या देख रहे हैं, और हाँ यह हर पर निष्पादित किया जाएगा पचाने

var app = angular.module('myApp', []); 
 
app.controller('MyController', ['$scope', MyController]); 
 
function MyController($scope) { 
 
\t $scope.isTrue = true; 
 
    setInterval(function() { 
 
     $scope.isTrue = !$scope.isTrue; 
 
     $scope.$digest(); 
 
    }, 1000); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.14/angular.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
 

 

 
<div ng-app="myApp" ng-controller='MyController'> 
 
    <div>{{isTrue ? "foo" : "bar"}}</div> 
 
</div>

पढ़ें Digest के बारे में

संबंधित मुद्दे