javascript - Bagaimanakah angularjs mengetahui parameter apa yang diperlukan dalam fungsi panggil balik?
欧阳克
欧阳克 2017-06-10 09:48:17
0
1
951

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?

欧阳克
欧阳克

温故而知新,可以为师矣。 博客:www.ouyangke.com

membalas semua(1)
迷茫

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan