angular.js - Bagaimanakah pengikatan dua hala angularjs dilaksanakan?
高洛峰
高洛峰 2017-05-15 16:59:32
0
6
604

Mereka yang telah menggunakan angularjs mesti tahu pengikatan dua halanya, yang sangat mudah digunakan, tetapi bagaimana ia dilaksanakan secara dalaman?

Mengemas kini data apabila paparan berubah adalah mudah difahami, dan kebanyakan orang tahu cara mensimulasikannya Tetapi apabila mengemas kini paparan apabila data berubah, kuncinya terletak pada cara menilai bahawa data telah berubah. . .

Saya memikirkannya sebelum ini, sama seperti menyimpan salinan oldValue dahulu, dan kemudian melintasi ini dengan kerap, membandingkan newValue dengan oldValue dan melakukan kemas kini dan kerja lain yang berkaitan jika ia berubah. . .

Tetapi adakah anda fikir ini okey? Setelah difikirkan lama-lama, saya rasa ianya tidak begitu boleh dipercayai. Saya harap adik-adik semua tidak teragak-agak untuk mengajar saya! ## Tajuk

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(6)
Ty80

Melaksanakan contoh mudah yang serupa dengan pengikatan dua hala

HTML

<input id="app" my-model="text" />

SKRIP

var scope = {};
var input = document.getElementById('app');

Lihat perubahan data kemas kini

Ini sangat mudah, cuma ikat acara semasa menyusun arahan myModel

input.addEventListener('input', function (e) {
    scope.text = e.currentTarget.value;
},false);

Perubahan data UI kemas kini

Terdapat pemerhati dan penghadaman di dalam skop

scope.$$watchers = [];
scope.$$watchers.push({
    key:'text',
    fn: function (value) {
        input.value = value;
    }
});

scope.$digest = function () {
    scope.$$watchers.forEach(function (watcher) {
        watcher.fn(scope.text);
    });
};

Apabila kami menetapkan nilai pada skop dan mencetuskan ringkasan, UI akan dikemas kini secara serentak

scope.text ='zzz';
scope.$digest();

Menetapkan nilai kepada skop secara langsung tidak akan mengemas kini UI hanya apabila ringkasan dicetuskan Dalam kebanyakan kes, Angular secara aktif mencetuskan ringkasan untuk kami, yang memberikan gambaran bahawa kami hanya menambah skop ke skop secara bersahaja. Tidak mengapa, tetapi hasilnya adalah situasi yang saya tidak faham. Contohnya

angular.module('myApp', [])
    .controller('MyCtrl', function ($scope) {
        setTimeout(function () {
            $scope.text = 'zzz';
        }, 1000);
    });
    

Menggunakan setTimeout secara langsung, hasilnya ialah UI tidak dikemas kini Kami perlu melakukan pemprosesan berikut

angular.module('myApp', [])
    .controller('MyCtrl', function ($scope) {
        setTimeout(function () {
            $scope.$apply(function () {
                $scope.text = 'zzz';
            });
        }, 1000);
    });
    

Atau gunakan $masa tamat sudut, yang membantu kami mencetuskan penghadaman

angular.module('myApp', [])
    .controller('MyCtrl', function ($scope,$timeout) {
        $timeout(function () {               
            $scope.text = 'zzz';
        }, 1000);
    });
巴扎黑

Mari cari. Terdapat banyak artikel yang boleh membantu anda menjawab soalan anda dahulu dan kemudian bertanya soalan

巴扎黑

Pertama sekali, saya ingin menyatakan bahawa saya tidak begitu biasa dengan angularjs yang disebutkan dalam soalan, yang agak di luar topik.
Kalah mati juga mempunyai ciri pengikatan data dua hala yang sama Ia dilaksanakan dalam mod pemerhatian, apabila memberikan nilai menggunakan kaedah yang ditetapkan, ia juga akan memberitahu pemerhati yang berminat dengan objek tersebut digunakan untuk mencapai kesan pengikatan dua hala data.

伊谢尔伦

angular1 ialah cek kotor. . Ini juga membawa masalah prestasi

世界只因有你

Bagaimanakah AngularJS melaksanakan mekanisme pengikatan data dua halanya?

迷茫

可以参考:
http://teropa.info/build-your-own-angular/build_your_own_angularjs_sample.pdf

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