cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Bagaimanakah angularjs mengetahui parameter apa yang diperlukan dalam fungsi panggil balik?

Contohnya begini

app.controller('myCtrl', function($scope, $rootScope) {
    // 将$rootScope改成其他名字就不行了。
    $scope.names = ["Emil", "Tobias", "Linus"];
    $rootScope.lastname = "Refsnes";
});

Bagaimana sudut mengetahui bahawa parameter kedua saya memerlukan $rootScope?

欧阳克欧阳克2718 hari yang lalu953

membalas semua(1)saya akan balas

  • 迷茫

    迷茫2017-06-10 09:50:17

    Kerana AngularJS menyediakan dua kaedah suntikan. Satu dipanggil suntikan pergantungan tersirat (suntikan pergantungan tersirat), dan satu lagi dipanggil suntikan pergantungan eksplisit (suntikan pergantungan eksplisit).

    Dalam kod anda, anda menggunakan jenis pertama, suntikan pergantungan tersirat:

    app.controller('myCtrl', function($scope, $rootScope) {
        $scope.names = ["Emil", "Tobias", "Linus"];
        $rootScope.lastname = "Refsnes";
    });

    Disebabkan $scope$rootScope 都是 AngularJS 的 built-in service,因此 AngularJS 可以找到你想要注入的东西。但如果你改成 rootScope, AngularJS tidak dapat mencarinya dari rangka kerjanya sendiri.

    Jika menggunakan suntikan pergantungan eksplisit, ini adalah:

    app.controller('myCtrl', ['$scope', '$rootScope', function(whatever, blah) {
        whatever.names = ["Emil", "Tobias", "Linus"];
        blah.lastname = "Refsnes";
    }]);

    Dengan cara ini AngularJS akan mencarinya berdasarkan $scope$rootScope yang diisytiharkan secara eksplisit. Maka tidak kira apa yang anda tetapkan dalam parameter fungsi tanpa nama. Hanya perhatikan pesanan.

    Sebagai alternatif, anda juga boleh melakukannya dengan menghubungi $inject secara manual. Seperti ini:

    var myController = function($scope, $rootScope) {
        $scope.names = ["Emil", "Tobias", "Linus"];
        $rootScope.lastname = "Refsnes";
    });
    
    myConroller.$inject = ['$scope', '$rootScope'];
    
    app.controller('myCtrl', myController);

    Sila rujuk dokumentasi untuk butiran: https://docs.angularjs.org/gu...
    Bahagian Anotasi Ketergantungan.

    Dokumentasi juga mengingatkan anda bahawa jika anda bercadang untuk memampatkan kod anda, jangan gunakan suntikan pergantungan tersirat.

    balas
    0
  • Batalbalas