我正在使用' LocalCtrl'控制器用于指令所需的所有功能,但是如何将指令的范围从指令和范围从指令返回到控制器。
我的指令嵌入在父控制器中。我知道如何使用链接函数并隔离范围,以便在指令和控制器之间进行双向绑定。我不确定如何使用以下结构继承父作用域。
function check_user_role( $atts, $content = null ) {
extract( shortcode_atts( array(
'role' => 'role' ), $atts ) );
$user = wp_get_current_user();
$roles = explode(',', $user);
$allowed_roles = array($roles);
if( array_intersect($allowed_roles, $user->roles ) ) {
return $content;
}
}
add_shortcode( 'user_role', 'check_user_role' );
答案 0 :(得分:1)
Angularjs中的指令有3个范围,如下所述
参考In which cases angular directive scope equals controller scope?
1。默认情况下,范围为false,这意味着更改指令中的范围变量也会更改父范围变量,因为它不会创建新范围。
app.directive('mydirective',function () {
return{
controller:'LocalCtrl as local',
templateUrl: '<div>{{local.content}}</div>',
}
});
scope:true
,这将在子指令中创建一个新的子范围,它从父范围或父控制器范围原型继承
app.directive('mydirective',function () {
return{
scope:true,
controller:'LocalCtrl as local',
templateUrl: '<div>{{local.content}}</div>',
}
});
3:scope:{}
:隔离范围,它不会从父范围继承(可以创建可重用的组件/指令)
查看强>
<div ng-controller = "mainCtrl ">
<my-directive content="mainContent" some-fn="someFn"></my-directive>
</div>
app.directive('mydirective',function () {
return{
scope:{
twoWayConent:'=content',// two way data binding
oneWayConent:'@conent', // one way binding
someFn:'&someFn' //function binding ( 2 way)
},
controller:'LocalCtrl as local',
templateUrl: '<div>{{local.content}}</div>',
}
});
4。 using require:
:如果在另一个指令中有一个指令,则可以使用In Directive Defination对象(DDO)require来访问子指令中的父指令控制器变量和功能,如下所示
查看强>
<parent-directive>
<child-directive></child-directive>
</parent-directive>
app.directive('childDirective',function () {
return{
require:'^parentDirective' // can be array of parents directive too
link:function(scope,element,attrs,parentDirectiveController){
console.log(parentDirectiveController) // can access parent directive controllers instances
}
}
});