Rumah > Soal Jawab > teks badan
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?
迷茫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.