Angular自定义属性指令应该被另一个指令取代
angular custom attribute directive should be replaced by another directive
我正在尝试实现一个自定义属性指令的src类属性,这应该代表一个相对路径到一个目录。
目录的路径在一个全局变量中(比如mydir)。
该属性应该替换为ng-src和目录路径的组合。
我想这样使用它:
<md-icon my-src="cake.svg"></md-icon>
<md-icon my-src="{{ anExpression }}"></md-icon>
<md-icon my-src="{{::onTimeBinding}}"></md-icon>
我也想支持这不仅仅是角材料的使用。
谢谢你的帮助!
编辑:我很抱歉我没有把自己的话解释清楚。我想支持在所有类型的元素中使用mySrc指令。它应该被替换为ng-src和基本目录。我创造了一个活塞,但它不起作用。到目前为止,代码看起来像这样:
app.directive("mySrc", function() {
return {
restrict: "A",
compile: function(element, attrs) {
return {
pre: function(scope, element, attributes) {
var baseUrl = 'http://dummyimage.com/';
attributes.$set("ng-src", baseUrl + attributes.mySrc);
}
}
}
}
});
使用示例:
<img my-src="100" />
<img my-src="{{ expr }}" />
<img my-src="{{:: oneTimeExpr }}" />
支持后两个选项对我们来说也很重要
您的指令实际上有效,但您的方法略有偏离。您不想将my-src
更改为ng-src
,因为ng-src
是一个指令,它与您试图做的事情相似。您实际上想要做的是将my-src
更改为src
,因此浏览器可以实际呈现标签。
换句话说,attributes.$set("src", baseUrl + attributes.mySrc);
做你想做的。但是,它不是动态的。
取自ng-src
的源代码,您可以使用$observe
来监视属性的更改。
pre: function(scope, element, attributes) {
var baseUrl = 'http://dummyimage.com/';
attributes.$observe("mySrc", function(value) {
attributes.$set("src", baseUrl + attributes.mySrc);
})
}
<button ng-click="expr = '200'">Test dynamic</button>
我只是添加了一个快速按钮来测试动态变化。对于$observe
,只要mySrc
属性发生变化,src
属性就会使用新的URL进行更新。
http://plnkr.co/edit/vogwUGai8iMavk5elDVB?p =预览
您可以在指令实现中执行所需的操作:
var app = angular.module('app', []);
app.directive('mySrc', function ($compile) {
return {
restrict: 'A',
replace: true,
scope: true,
template: '<li><img ng-src="{{ image }}" /></li>',
link: function (scope, element, attrs) {
var baseUrl = 'http://dummyimage.com/';
console.log(attrs);
scope.image = baseUrl + attrs.mySrc;
}
};
});
这是工作plunkr
相关文章:
- 如何在另一个组件中获取指令/组件实例
- 如何使用其他自定义指令中的元素标记作为另一个自定义指令的模板
- 调用另一个自定义指令的角度自定义指令
- AngularJs 从指令中的另一个调用控制器
- 如果指令包含在另一个指令中,我如何在隔离范围内添加双向数据绑定属性
- 测试依赖于另一个指令Angularjs的指令
- 如何在angularjs中访问一个指令作用域值到另一个指令
- 当uib分页被包装在另一个指令中时,AngularJS表数据没有更新
- ng-repeat=“(key, value)” 不能将 {{key}} 的值用作另一个指令的全局范围的一部分
- 如何在angularjs中将一个具有赋值的指令转换为另一个指令
- 从另一个模块访问作用域的指令
- 从另一个指令访问指令的作用域变量
- 如何从另一个指令访问指令的 DOM 元素
- 如何仅当存在时才要求指令(在另一个指令内)
- 使用 AngularJS 需要选项调用另一个指令
- 另一个排除指令内的角度排除指令
- 使用一个指令从另一个独立作用域复制范围属性
- 角度:在另一个模态指令中加载的谷歌地图指令保持空白
- 自定义指令如何知道它是否已单击另一个控件
- 在另一个指令中使用 ui-tinymce 指令