在 AngularJS 指令中实现继承
Implementing inheritance in AngularJS directives
我正在尝试在AngularJS指令中实现OOP继承以制作可重用的控件。 我正在使用 Base2 的类定义进行继承。 我当时想的是实施这样的指令
<control-input type="text" name="vendor_name"></control-input>
然后我会为通用功能创建一个 BaseControl
类
angular.module('base',[]).factory('BaseControl', function() {
return Base.extend({
'restrict': 'E',
'require': '^parentForm'
/* ... */
};
});
然后我会创建特定的控件
angular.module('controls',['base']).factory('TextControl', function(BaseControl) {
return BaseControl.extend({
/* specific functions like templateUrl, compile, link, etc. */
};
});
问题是我想使用单个指令control-input
并在属性中指定类型,但问题是当我创建指令时,我不知道如何检索类型
angular.module('controls',['controls']).directive('control-input', function(TextControl) {
/* here it should go some code like if (type === 'text') return new TextControl(); */
});
有什么想法吗?
您可以使用 link 函数的attrs
参数来获取每个指令的类型。查看下面的代码并检查您的控制台。 (http://jsbin.com/oZAHacA/2/)
<html ng-app="myApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>
<script>
var myApp = angular.module('myApp', []);
myApp.directive('controlInput', [function () {
return {
restrict: 'E',
link: function (scope, iElement, iAttrs) {
console.log(iAttrs.type);
}
};
}]);
</script>
</head>
<body>
<control-input type="text" name="vendor_name"></control-input>
</body>
</html>
相关文章:
- 在JavaScript中使用对象文字实现继承
- CoffeeScript 中的继承实现
- 在 JavaScript 中实现简单继承
- 使用Google闭包库的正确继承/子类实现剖析
- 如何在 javascript 中实现继承
- 如何实现 JavaScript 对象继承
- 在这种情况下在 JavaScript 中实现继承 [更具体地说是 node.js]
- 如何在 Screeps 对象中实现继承
- 在 AngularJS 指令中实现继承
- 在Javascript中使用寄生继承,是否可以实现内省实例方法
- 这种嵌套命名空间继承模式是否得到了很好的实现
- 用Selfish实现Javascript中的简单继承
- 我怎么能在Backbone中简单地实现类Sencha继承呢
- 使用父对象中的私有变量实现原型继承
- 如何在JavaScript中实现继承
- 我如何在JavaScript中实现这个java模式(使用继承)
- Javascript:如果不使用define prototype方法就可以实现继承,为什么还要使用它呢?
- 如何在Jquery UI控件中实现继承
- 在javascript中实现继承时出错
- 如何实现继承像&;var obj = new OpenLayers.Layer.WMS(.. ..)&;在Javascr