AngularJS指令继承
AngularJS directive inheritance
我对Angular很陌生,我遇到了一个关于指令和继承的问题。假设有两个指令:
<my-pic my-log="log pic" my-warn="pic warn" my-src="/some/url/pic.jpg"></my-pic>
<my-button my-log="log button" my-warn="button warn" my-text="button text"></my-button>
JS代码
angular.module("app", [])
.directive("myPic",function(){
return {
restrict: "E"
,scope: {
log: "@myLog"
,src: "@mySrc"
,warn:"@myWarn"
}
,template: '<img src="{{src}}" title="{{log}} | {{warn}}"></img>'
,controller: function($scope, $log){
$log.log($scope.log);
$log.warn($scope.warn);
}
};
})
.directive("myButton",function(){
return {
restrict: "E"
,scope: {
log: "@myLog"
,text: "@myText"
,warn: "@myWarn"
}
,template: '<button title="{{log}} | {{warn}}">{{text}}</button>'
,controller: function($scope, $log){
$log.log($scope.log);
$log.warn($scope.warn);
}
};
});
电笔http://codepen.io/anon/pen/VLMdRL
问题
问题是,是否可以创建第三个指令,从中可以派生MyPic和MyButton指令,并处理my log="…"和my warn="…"属性($log代码并将title属性添加到模板代码)?my log和my warn属性必须由同一指令处理,并且子指令仍然可以访问属性值。
谢谢你的帮助!
在这种情况下,您不需要继承。只需编写一个服务来处理常见的日志操作,并将其注入指令中。
好吧,我找到了一个可以接受的解决方案,但也许有更好的解决方案。我所做的是,我创建了第三个指令"myLogger",然后将其添加到"myButton"answers"myPic"指令的模板中。我还创建了一个函数,该函数被定义为常量,并将日志记录属性添加到指令的范围中。"myLogger"指令执行控制台日志记录并将"title"属性播发到HTML元素。
欢迎提出任何改进该解决方案的建议/想法。如果有人能提供更好的解决方案,我也将不胜感激。
HTML代码:
<my-pic my-log="log pic" my-warn="pic warn" my-src="/some/url/pic.jpg"></my-pic>
<my-button my-log="log button" my-warn="button warn" my-text="button text"></my-button>
Javascript代码:
angular.module("app", [])
.constant("addLogScope",function(opts){
return angular.extend(opts || {},{
myWarn: "@"
,myLog: "@"
});
})
.directive("myLogger",function(){
return {
restrict: "A"
,scope: true
,controller: function($scope, $log){
console.log($scope.myLog);
console.info($scope.myWarn);
}
,link: function($scope, $element, $attrs){
$element.prop("title",$scope.myLog + " | " + $scope.myWarn);
}
};
})
.directive("myPic",function(addLogScope){
return {
restrict: "E"
,scope: addLogScope({
mySrc: "@"
})
,transclude: true
,template: '<img src="{{mySrc}}" my-logger></img>'
,controller: function($scope){
}
};
})
.directive("myButton",function(addLogScope){
return {
restrict: "E"
,scope: addLogScope({
myText: "@"
})
,template: '<button my-logger>{{myText}}</button>'
,controller: function($scope){
}
};
});
代码笔:http://codepen.io/anon/pen/rVYgew
相关文章:
- 从控制器继承了隔离的作用域以生成可重用的指令
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 当使用控制器作为语法时,如何从父指令继承属性
- AngularJS - 在自定义指令中继承ngModel
- AngularJS观察指令属性表达式,动态继承作用域
- 为什么可以't我的指令从其父作用域继承函数
- Angularjs.嵌套指令中的继承作用域
- AngularJS中的控制器/指令继承
- AngularJS自定义指令在继承父作用域时访问模板中的属性
- 属性内的角度指令范围继承
- 使用 Restangular 保持 CRUD 干燥:指令、继承控制器或包装服务
- 在 AngularJS 指令中实现继承
- 角度指令的作用域继承
- $scope不会使用点表示法从控制器注入/继承到指令
- Angularjs将变量传递给具有继承(而非隔离)作用域的指令
- 角度指令控制器作用域继承
- AngularJS指令范围继承
- 通过指令表达式继承方法
- 混淆了 AngularJS 中指令之间的范围继承
- 指令/继承范围