Cara menggunakan $parse atau $eval untuk memberikan nilai kepada pembolehubah Skop semasa masa jalan dalam AngularJS_AngularJS

WBOY
Lepaskan: 2016-05-16 15:18:21
asal
1290 orang telah melayarinya

Dalam "Menyesuaikan Arahan tentang jadual dalam AngularJS", Direcitve tentang jadual diperibadikan seperti ini:

<table-helper datasource="customers" clumnmap="[{name: 'Name'}, {street: 'Street'}, {age: 'Age'}, {url: 'URL', hidden: true}]"></table-helper>
Salin selepas log masuk

Di atas, nilai colmnmap pembolehubah dipratakrifkan dalam Skop:

return {
restrict: 'E',
scope: {
columnmap: '=',
datasource: '='
},
link:link,
template:template
}; 
Salin selepas log masuk

Dalam AngularJS, terdapat juga cara untuk menetapkan nilai kepada pembolehubah Skop semasa masa jalan, iaitu menggunakan kaedah $parse atau $eval dalam fungsi pautan.

Pembentangan Direcitve adalah sama seperti sebelum ini:

<table-helper-with-parse datasource="customers" columnmap="[{name: 'Name'},...]"></table-helper-with-parse>
Salin selepas log masuk

Arahan lebih kurang seperti ini:

var tableHelperWithParse = function($parse){
var template = "",
link = function(scope, element, attrs){
var headerCols = [],
tableStart = '<table>',
tableEnd = '</table>',
table = '',
visibleProps = [],
sortCol = null,
sortDir = 1,
columnmap = null;
$scope.$watchCollection('datasource', render);
//运行时赋值columnmap
columnmap = scope.$eval(attrs.columnmap);
//或者
columnmap = $parse(attrs.columnmap)();
wireEvents();
function rener(){
if(scope.datasource && scope.datasourse.length){
table += tableStart;
table += renderHeader();
table += renderRows() + tableEnd;
renderTable();
}
}
};
return {
restrict: 'E',
scope: {
datasource: '='
},
link: link,
template: template
}
}
angular.module('direcitvesModule')
.directive('tableHelperWithParse', tableHelperWithParse);
Salin selepas log masuk

Izinkan saya memperkenalkan kepada anda perbezaan antara $parse dan $eval

Pertama sekali, $parse dan $eval digunakan untuk menghuraikan ungkapan, tetapi $parse wujud sebagai perkhidmatan yang berasingan. $eval digunakan sebagai kaedah skop.

Penggunaan biasa $parse adalah untuk menetapkan nilai ungkapan rentetan yang dipetakan kepada objek sebenar. Anda juga boleh mendapatkan nilai yang sepadan dengan ungkapan secara langsung daripada $parse.

var getter = $parse('user.name'); 
var setter = getter.assign; 
setter(scope, 'new name');
getter(context, locals) // 传入作用域,返回值
setter(scope,'new name') // 修改映射在scope上的属性的值为‘new value'
Salin selepas log masuk

$eval ialah skop.$eval, yang melaksanakan ungkapan dalam skop semasa, seperti: skop.$eval('a b'); dan a dan b di sini datang daripada skop = {a: 2, b: 3};

Lihat kod sumber dan pelaksanaannya ialah

$eval: function(expr, locals) {
return $parse(expr)(this, locals);
},
Salin selepas log masuk

Anda boleh mendapati ia juga berdasarkan $parse, tetapi parameternya telah ditetapkan pada ini, iaitu skop semasa, jadi $eval hanyalah pakej berdasarkan $parse, dan merupakan API pantas untuk $parse .

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!