cari

Rumah  >  Soal Jawab  >  teks badan

angular.js – skop sudut

Saya mengalami kekeliruan semasa mempelajari arahan hari ini:

    <!DOCTYPE html>
<html ng-app="app">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title></title>
    <link rel="stylesheet" href="../css/lib/bootstrap4.css">

    <script type="text/javascript" src='../js/lib/angular.js' ></script>
    <script type="text/javascript" src='js/scope2.js'></script>
</head>

<body>
    
    <p ng-init = 'someProperty="some date"'>
    
        <p ng-init='siblingProperty="moredata"'>
            Inside p Two : {{aThirdProperty}}
    
            <p ng-init="aThirdProperty='data for 3rd property'" ng-controller="someCtrl">
                Inside p Three: {{aThirdProperty}}
    
                    <p ng-controller="secondCtrl">
                        Inside p Four: {{aThirdProperty}}
                        <br>
                        OutSide myDirective: {{myProperty}}
                        <p my-directive ng-init="myProperty='wow! that is cool'">
                            Inside myDirective : {{myProperty}}
                        </p>

                    </p>

            </p>

        </p>
    
    </p>
    
</body>
</html>

js

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

    
}])

app.controller('secondCtrl', ['$scope', function($scope){
    console.log($scope.myProperty)    //undefined
    
}])
app.directive('myDirective',function(){
    return {
        restrict :'A',
        scope:false
        
    }

})

Mengapa tidak ditakrifkan dicetak?

Kemudian tukar skop dalam arahan js kepada scope:{}; Mengapa ini muncul? Dalam erti kata lain, mengapa OutSide myDirective: wow! that is cool di luar mempunyai nilai?

    Inside p Two :
    Inside p Three: data for 3rd property
    Inside p Four: data for 3rd property 
    OutSide myDirective: wow! that is cool
    Inside myDirective : wow! that is cool
PHP中文网PHP中文网2780 hari yang lalu554

membalas semua(3)saya akan balas

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-15 17:00:35

    <p my-directive ng-init="myProperty='wow! that is cool'">
        Inside myDirective : {{myProperty}}
    </p>

    Pertama sekali, apa yang anda tulis tidak ada kaitan dengan arahan. scope arahan ialah skop template yang mempengaruhinya, yang tidak berlaku di sini.

    app.controller('secondCtrl', ['$scope', function($scope){
        console.log($scope.myProperty)    //undefined
    }])

    Sebab mengapa ia tidak ditentukan di sini adalah kerana pengawal dilaksanakan sebelum ng-init. Anda boleh menggunakan kelewatan atau $watchpantau

    $timeout(function() {
      console.log($scope.myProperty)
    });
    // or
    $scope.$watch('myProperty', function(newVal) {
      console.log($scope.myProperty)
    })

    balas
    0
  • 阿神

    阿神2017-05-15 17:00:35

    Hmm, saya faham yang tidak ditakrifkan di atas, tetapi saya masih keliru sedikit tentang yang terakhir, iaitu, apabila scope:{}, ungkapan Inside myDirective : {{myProperty}} masih tergolong dalam skop luar, bukan? Pada masa ini, tiada tetapan dalam templat,,, jadi skop pengasingan tidak berfungsi Adakah saya faham ini dengan betul?
    Terdapat soalan lain Jika ini berlaku, mengapa keputusan berikut berlaku jika skop ditetapkan kepada scope:true:

        Inside p Two :
        Inside p Three: data for 3rd property
        Inside p Four: data for 3rd property 
        OutSide myDirective:
        Inside myDirect33ive : wow! that is cool

    Bolehkah anda memberi saya nasihat lagi. Terima kasih~~

    balas
    0
  • PHP中文网

    PHP中文网2017-05-15 17:00:35

    Skop benar ialah skop bebas dan terpencil
    Jika {}, hanya sifat di dalam {} akan diasingkan

    balas
    0
  • Batalbalas