Rumah > Soal Jawab > teks badan
初学Angular遇到了点困惑,以下面这个控制器函数为例
function hello($scope) {
$scope.name = '张三'
}
这是个函数声明,$scope理应是形参吧?可是把$scope改为其他标识符如s就不行了。可见$scope是hello函数被调用时传入的实参。但这三行代码是函数的声明,怎么就传入实参了呢?
我大概意识到了这不是一个正常的函数声明,可能与Angular的控制器函数的绑定机制有关系?具体是怎样的?
曾经蜡笔没有小新2017-05-15 16:52:49
Parameter lulus jenis ini untuk mendapatkan kebergantungan ialah ciri utama AngularJS - salah satu manifestasi suntikan kebergantungan.
Tetapi mengapa kita boleh mendapatkan kebergantungan dengan hanya mengisytiharkan parameter?
AngularJS menggunakan $injector
untuk mengurus pertanyaan dan pemuatan bergantung, seperti
// 使用注入器加载应用
var injector = angular.injector(['ng', 'myApp']);
// 通过注入器加载$controller服务
var $controller = injector.get('$controller');
var scope = injector.get('$rootScope').$new();
// 加载控制器并传入一个作用域
var MyController = $controller('MyController', {$scope: scope})
Jika tiada pengisytiharan yang jelas, $injector
menyimpulkan kebergantungan berdasarkan nama parameter Pada masa ini, susunan parameter tidak bermakna.
Dengan kata lain, kita juga boleh mengisytiharkan seperti ini:
angular.module('myApp')
.controller('MyController', ['$scope', 'greeter', function(renamed$scope, renamedGreeter) {
//do something
}]);
滿天的星座2017-05-15 16:52:49
Nah, perkara ini hanyalah pengisytiharan fungsi di mana ia ditulis sama ada nama parameter formal adalah penting diputuskan sepenuhnya oleh pembaca Penghurai standard ECMAScript tidak menganggapnya penting (saya rasa), tetapi Angular menulisnya dalam js. . . Dengan cara ini, nama parameter fungsi adalah penting
曾经蜡笔没有小新2017-05-15 16:52:49
Skop
Objek $scope dalam AngularJS ada di sini untuk menukar model domain
Terdedah kepada pandangan (templat). Hanya tetapkan harta kepada contoh skop dan anda boleh mendapatkan nilai apabila templat diberikan.Skop juga boleh memanjangkan data dan fungsi khusus untuk paparan tertentu. Hanya tentukan beberapa fungsi pada contoh skop untuk menukar UI tertentu
Logiknya terdedah kepada templat.Sebagai contoh, anda boleh mencipta kaedah pengambil untuk pembolehubah nama seperti berikut:
var HelloCtrl = function ($scope) { $scope.getName = function() { return $scope.name; }; }
Kemudian gunakannya dalam templat seperti ini:
<h1>Hello, {{getName()}} !</h1>
$skop
Objek memberi kita kawalan yang sangat tepat ke atas bahagian model yang mana dalam domain ini dan operasi yang tersedia pada lapisan paparan. Secara teorinya, skop AngularJS sangat serupa dengan ViewModel corak MVVM.
http://note.sdo.com/u/635412003927148913/n/s6cBN~lcIHwG4M1-Y000LW