angular.js - Adakah $scope parameter formal atau parameter sebenar apabila mengisytiharkan fungsi pengawal dalam Angular?
世界只因有你
世界只因有你 2017-05-15 16:50:49
0
3
797

Saya agak keliru apabila saya baru menggunakan Angular Ambil fungsi pengawal berikut sebagai contoh

    function hello($scope) {
        $scope.name = '张三'
    }

Ini ialah pengisytiharan fungsi, $scope sepatutnya menjadi parameter rasmi, bukan? Tetapi menukar $scope kepada pengecam lain seperti s tidak akan berfungsi. Ia boleh dilihat bahawa $scope ialah parameter sebenar yang diluluskan apabila fungsi hello dipanggil. Tetapi ketiga-tiga baris kod ini ialah pengisytiharan fungsi, jadi mengapa parameter sebenar diluluskan?

Saya mungkin menyedari bahawa ini bukan pengisytiharan fungsi biasa Mungkin ia ada kaitan dengan mekanisme pengikatan fungsi pengawal Angular? Apa sebenarnya rupanya?

世界只因有你
世界只因有你

membalas semua(3)
曾经蜡笔没有小新

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, $injectormenyimpulkan 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
}]);
滿天的星座

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

曾经蜡笔没有小新

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

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