AngularJS中多个指令的一个声明
One declaration for multiple directives in AngularJS
我正在为所有h1-h6
元素创建自定义指令。所有指令体都是相同的:它们为h-element
设置了随机颜色。
这是我的工作代码-丑陋和干燥
angular.module('example', []);
angular.module('example').factory('randomColor', function () {
return function () {
var colors = ['#FF6A88', '#39FF82', '#7AD5D5', '#DFAF01'];
var randomPick = parseInt(Math.random() * colors.length);
return colors[randomPick];
};
});
angular.module('example').directive('h1',['randomColor', function (randomColor) {
return {
restrict: 'E',
link: function (scope, element) {
$(element).css({ color: randomColor() });
}
};
}]);
angular.module('example').directive('h2',['randomColor', function (randomColor) {
return {
restrict: 'E',
link: function (scope, element) {
$(element).css({ color: randomColor() });
}
};
}]);
//the same for h3-h6
你可以在这里检查这个代码:Plunker-DRY版本
有可能实现这样的目标吗
angular.module('example').directive(['h1','h2','h3','h4','h5','h6'],['randomColor', function (randomColor) {
return {
restrict: 'E',
link: function (scope, element) {
$(element).css({ color: randomColor() });
}
};
}]);
有很多方法可以解决它,毕竟它只是JavaScript。。。
数组foreach将是一个选项,您也可以查看有角度的核心,在那里实际做了一些事情来最小化样板。
var mod = angular.module('example');
['h1','h2','h3', 'h4','h5','h6'].forEach(function(tag) {
mod.directive(tag,[ 'randomColor', function(randomColor) {
return {
restrict: 'E',
link: function (scope, element) {
//Note: for angular 1.x element is already a JQuery or JQLite object,
// so no need for hte $() wrapping here.
// You need to load JQuery before angular
// for it to be a full JQuery object.
element.css({color: randomColor()});
}
};
}]);
});
你试过这样的东西吗?
var app = angular.module('example', []);
var fn = function(randomColor) {...};
app.directive('h1', ['randomColor', fn]);
app.directive('h2', ['randomColor', fn]);
...
var mod=angular.module('example', []);
mod.factory('randomColor', function() {
return function(){
var colors = ['#FF6A88', '#39FF82', '#7AD5D5', '#DFAF01'];
var randomPick = parseInt(Math.random()*colors.length);
return colors[randomPick];
};
});
var headerDirective=[ 'randomColor', function(randomColor) {
return {
restrict: 'E',
link: function (scope, element) {
$(element).css({color: randomColor()});
}
};
}];
['h1','h2','h3', 'h4','h5','h6'].forEach(function(tag) {
mod.directive(tag,headerDirective);
});
相关文章:
- 一个'var'在函数内部声明
- 如何获得一个与用“”声明的变量工作方式相同的变量;设“;或在with块中
- 是否可以在另一个变量中使用未声明的变量
- AngularJS中多个指令的一个声明
- 为什么要将一个函数赋给一个变量,而不是声明一个命名函数
- 如何调用Crossrider中声明的javascript函数;background.js”;点击我网站页面上的一个按钮
- 为什么我的变量需要一个'var'声明,当它's已经在var声明中了
- 声明一个js变量,该变量将被我的2个jsp访问
- 你能在Javascript中创建一个对象而不声明每个值吗,以及如何
- 将一个简单的函数声明形成JavaScript中的闭包
- 无法使用typescript访问angular中另一个控制器中声明的$rootscope属性
- 我需要用javascript声明一个对象吗
- 用javascript声明一个简单函数
- 如何在一个地方声明angular ui引导程序日期选择器设置
- 用javascript在一个对象的两个键上声明两个数组的简洁方法是什么
- 如何使用一个声明生成多个常量
- 需要声明,但找到'"显示:无"'.跳过到下一个声明
- javascript,我可以在一个声明/行中完成这项操作吗
- 在Angular JS的控制器中添加一个声明的对象
- 如何在Javascript中创建一个声明变量的菜单?