Saya sendiri menulis arahan, seperti berikut:
html
<myDirective source="listOne()"</myDirective>
<myDirective source="listTwo()"</myDirective>
pengawal
...
$scope.listOne = function(){
//返回一个promise
};
$scope.listTwo = function(){
//返回另一个promise
};
...
arahan
angular.module('myApp')
.directive('myDirective', function() {
function DataList(sourceFn) {
var debounceId;
self.list = [];
self.load = function(){
$timeout.cancel(debounceId);
debounceId = $timeout(function() {
var promise = sourceFn();
promise.then(function(data) {
self.list = data;
});
},0,false);
};
return self;
}
return {
restrict: 'E',
replace: true,
scope: {
source: '&'
},
link: function(scope, element, attr) {
...
var data = new DataList(scope.source);
...
scope.dataset = data.list;
...
},
template: '\
...\
<li ng-repeat="d in dataset">{{d}}</li>\
...\'
};
}
Kemudian masalah datang Dijangkakan bahawa kedua-dua sumber akan mengembalikan dua set data yang berbeza, tetapi keadaan sebenar ialah data yang dipaparkan dalam dua senarai adalah sama, dan ia adalah data yang dikembalikan oleh fungsi kedua listTwo(), iaitu, jika saya menukar kedudukan listOne() dan listTwo(), dan data yang dikembalikan ialah data listOne().
Mungkinkah
var data = new DataList(scope.source);
...
scope.dataset = data.list;
Apabila menggunakan baharu untuk kali kedua, adakah anda menggantikan data dari kali pertama?
Tetapi tidakkah skop:{source: '&'} menjana skopnya sendiri untuk arahan itu?
Saya ingin belajar arahan dengan baik, terima kasih terlebih dahulu
Ini adalah masalah dengan DataList anda Perkara yang anda pulangkan ialah rujukan sendiri, yang kelihatan seperti tetingkap, jadi senarai yang sepadan ialah pembolehubah global, jadi tidak kira berapa kali anda menetapkan nilai, hanya yang terakhir akan berkuat kuasa.