Javascript 创建自定义ng重复以避免angularjs中的$watch
我正在使用ng repeat的自定义指令以避免Javascript 创建自定义ng重复以避免angularjs中的$watch,javascript,angularjs,angularjs-directive,angularjs-watch,Javascript,Angularjs,Angularjs Directive,Angularjs Watch,我正在使用ng repeat的自定义指令以避免$watch。我已尝试尽一切可能修改该指令以跳过$watchCollection()。但如果没有这个,我就无法访问指令中的数据 是否可以创建从dom获取模型值并更新页面dom的指令,而无需创建$watch? 下面的myRepeatDirective中包含了我想要在不使用$watch的情况下重新创建此指令的所有内容 我已经厌倦了将一次绑定(:)与ng repeat一起使用,但它使用的是分页。网格加载后不会更新 提前谢谢 .directive('myRe
$watch
。我已尝试尽一切可能修改该指令以跳过$watchCollection()
。但如果没有这个,我就无法访问指令中的数据
是否可以创建从dom获取模型值并更新页面dom的指令,而无需创建$watch
?
下面的myRepeatDirective
中包含了我想要在不使用$watch
的情况下重新创建此指令的所有内容
我已经厌倦了将一次绑定(:
)与ng repeat
一起使用,但它使用的是分页。网格加载后不会更新
提前谢谢
.directive('myRepeat', [ '$animate', function($animate) {
var updateScope = function(scope, index, valueIdentifier, value, key, arrayLength) {
scope[valueIdentifier] = value;
scope.$index = index;
scope.$first = (index === 0);
scope.$last = (index === (arrayLength - 1));
scope.$middle = !(scope.$first || scope.$last);
scope.$odd = !(scope.$even = (index&1) === 0);
};
return {
restrict: 'A',
transclude: 'element',
compile: function($element, $attrs) {
var expression = $attrs.myRepeat;
var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)?\s*$/);
var valueIdentifier = match[1];
var collection = match[2];
return function($scope, $element, $attr, ctrl, $transclude) {
$scope.$watchCollection(collection, function(collection) {
var index, length,
previousNode = $element[0],
collectionLength,
key, value;
collectionLength = collection.length;
for (index = 0; index < collectionLength; index++) {
key = index;
value = collection[key];
$transclude(function(clone, scope) {
$animate.enter(clone, null, angular.element(previousNode));
previousNode = clone;
updateScope(scope, index, valueIdentifier, value, key, collectionLength);
});
}
});
}
}
}
}]);
.directive('myRepeat',['$animate',function($animate){
var updateScope=函数(范围、索引、值标识符、值、键、数组长度){
范围[valueIdentifier]=值;
范围.$index=索引;
范围.$first=(索引==0);
作用域。$last=(索引==(数组长度-1));
scope.$middle=!(scope.$first | | scope.$last);
作用域。$奇数=!(作用域。$偶数=(索引和1)==0);
};
返回{
限制:“A”,
转移:'元素',
编译:函数($element,$attrs){
var表达式=$attrs.myRepeat;
var match=expression.match(/^\s*([\s\s]+?)\s+in\s+([\s\s]+?)?\s*$/);
var valueIdentifier=匹配[1];
var集合=匹配[2];
返回函数($scope、$element、$attr、ctrl、$transclude){
$scope.$watchCollection(集合,函数(集合){
var指数,长度,
previousNode=$element[0],
集合长度,
关键、价值;
collectionLength=collection.length;
对于(索引=0;索引
angular基于观察者-没有观察者?没有角度您是否考虑过使用而不是重新创建整个指令?(::不使用分页)