指令 作用域更改时无法触发
Directive Fails to fire when scope changes
我正在开发一个应用程序,该应用程序显示来自reddit的内容,并使用他们的API获取img URL。然而,并非每个 reddit 帖子都包含图像;因此,我编写了一个指令来删除任何在尝试绑定时遇到错误的图像(及其父容器((因为它们是非图像或因为它们是 404(。
该指令如下所示:
app.directive('img', function() {
return {
restrict: 'E',
link: function(scope, element, attrs) {
element.error(function() {
element.parent().remove();
});
scope.$watch(function() { return element['img']; },
function() {
element.error(
function(){ element.parent().remove(); }
);
}
);
}
}
});
当我第一次加载页面时,一切正常。所有图像都已正确过滤,其余图像将到位。但是,当我到达页面底部时,ng-infinite-scroll调用了一个函数来从reddit加载更多图像。这些新图像不会被指令过滤,更糟糕的是,第一组的非图像会返回。
我包含了scope.$watch声明,希望解决这个问题,但它似乎没有帮助。
与该指令争论的任何想法?谢谢!
我尝试了一种不同的方法,仅将图像添加到数组中,如果它们是有效的图像,而不是在之后删除它们。其中一个问题是,很多网址都是html页面,而不是原始图像。有些图像也非常大,因此会导致性能问题 (DEMO(。
$http.jsonp(url).success(function(data) {
var items = data.data.children;
var allPromises = [];
for (var i = 0; i < items.length; i++) {
if(!items[i].data.url.match(/.+'.(jpg|jpeg||png|gif)$/i)) continue;
var deferred = $q.defer();
(function(self, index, d) {
var img = new Image();
img.src = items[index].data.url;
img.onload = function() {
d.resolve(items[index].data);
}
img.onerror = function() {
d.resolve();
}
})(this, i, deferred);
allPromises.push(deferred.promise);
}
$q.all(allPromises).then(function(items) {
this.items = this.items.concat(items.filter(function(item) {
return item != undefined;
}));
this.after = "t3_" + this.items[this.items.length - 1].id;
this.busy = false;
}.bind(this));
}.bind(this));
相关文章:
- 从控制器继承了隔离的作用域以生成可重用的指令
- 对父作用域的指令更新延迟了一步
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- AngularJS指令隔离作用域
- 访问多个指令的隔离作用域
- 如何在html中以角度显示自定义指令的作用域
- 如何在隔离作用域指令中访问此作用域变量
- 如何为通过ng-view指令或ng-controller指令创建的每个新作用域设置侦听器
- AngularJs,在没有隔离的情况下将指令属性添加到作用域
- 如何在angularjs中将多个作用域变量传递到自定义指令中
- 从指令链接函数监视控制器作用域
- 当指令中已经给定作用域时,如何访问控制器中声明的函数
- AngularJS:如何调用指令中定义的函数'控制器的作用域
- 无作用域指令-如何获取数据
- AngularJS:ng repeat未在作用域指令内执行
- 隔离作用域指令不会对更改做出反应:angularjs
- 带有双向绑定的孤立作用域指令不能反映控制器作用域的变化
- 在隔离作用域指令中,在作用域上定义变量和在控制器上定义变量之间有什么区别吗?
- 为什么我应该在 AngularJS 中使用隔离的作用域指令
- angularJS无法获取作用域.指令中的数据