作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想创建一个 ngLoad
我网页上的图像指令。这是我的首选标记:
<img ng-src="{{ src }}" ng-load="onLoad()">
现在,我有一个 imgLoad
带有 ngLoad
的指令在 scope
中指定,像这样:
var app = angular.module('app', []);
app.directive('imgLoad', [function() {
return {
restrict: 'A',
scope: {
loadHandler: '&ngLoad'
},
link: function (scope, element, attr) {
element.on('load', scope.loadHandler);
}
};
}]);
生成的标记是:
<img ng-src="{{ src }}" img-load ng-load="onLoad()">
编辑:我之前假设指令的名称(即 imgLoad
)需要与我的属性名称(即 ngLoad
)不同。不是这种情况。 解决方案是将我的指令命名为ngLoad
.
我想去掉 imgLoad
属性。我要ngLoad
无论任何其他属性如何工作。
我的实现基于:
非常感谢任何帮助!
最佳答案
感谢@smk对于这个答案
为指令和范围属性指定相同的名称。
app.directive('imgLoad', function() { // 'imgLoad'
return {
restrict: 'A',
scope: {
loadHandler: '&imgLoad' // 'imgLoad'
},
link: function (scope, element, attr) {
element.on('load', scope.loadHandler);
}
};
});
HTML:
<img img-load="onLoad()">
JSFiddle • AngularJS Guide to Isolate Scopes
虽然此解决方案在大多数情况下都很实用,但它会阻止您在同一元素上使用另一个具有隔离作用域的指令。这让我们……
使用$parse
自己处理属性。效果是一样的,不会和 isolate 作用域有任何冲突。
app.directive('imgLoad', ['$parse', function($parse) { // Inject $parse
return {
restrict: 'A',
link: function(scope, element, attr) {
var loadHandler = $parse(attr.imgLoad); /* Parse value of
'imgLoad' attribute */
element.on('load', function() {
loadHandler(scope); /* Run the function returned by $parse.
It needs the scope object
to operate properly. */
});
}
};
}]);
HTML(看起来和以前一样):
<img img-load="onLoad()">
JSFiddle • AngularJS $parse Documentation
旁注:我没有使用 ngLoad 因为 Angular advises against it
关于javascript - AngularJS 指令 : put a call function in an attribute, 不包含另一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20863891/
我是一名优秀的程序员,十分优秀!