Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:数据未通过属性传递到指令_Angularjs - Fatal编程技术网

AngularJS:数据未通过属性传递到指令

AngularJS:数据未通过属性传递到指令,angularjs,Angularjs,在我的AngularJs(v1.5.9)应用程序中,我有一种列表视图指令,它本身依赖于一个指令来呈现单个复杂的项目。在列表项中究竟应该呈现什么由使用者决定,并通过转换传递进来 基本结构如下所示: <list-directive> <list-item> <some more stuff /> <transcluded content /> </list-item> </list-directive>

在我的AngularJs(v1.5.9)应用程序中,我有一种列表视图指令,它本身依赖于一个指令来呈现单个复杂的项目。在列表项中究竟应该呈现什么由使用者决定,并通过转换传递进来

基本结构如下所示:

<list-directive>
  <list-item>
     <some more stuff />
     <transcluded content />
  </list-item>
</list-directive>

我现在尝试向这个结构添加另一个指令,它将可以通过属性传入的数据从外部传入顶级元素,然后根据每个列表项的输入进行处理

该结构有点复杂,我试图将下面的代码片段减少到最低限度

//控制器
(函数(){
"严格使用",;
函数FcDataListCtrl($scope,$q,$element){
var=这个;
initVars();
init();
函数initVars(){
that.actionButtons=that.actionButtons | |[];
}
函数init(){
}
}
有棱角的
.module('controls.fcDataList.controller',[])
.controller('fcDataListCtrl',fcDataListCtrl');
})();
(功能(){
"严格使用",;
函数FcDataList(){
返回{
限制:'E',
是的,
模板:`
`,
范围:{
项目:“=?”,
操作按钮:“=?”
},
控制器:“fcDataListCtrl”,
controllerAs:'fcDataList',
bindToController:true
};
}
有棱角的
.module('controls.fcDataList'[
“controls.fcDataList.controller”,
'控件.fcDataList.item'
])
.指令(“fcDataList”,fcDataList);
})();
(功能(){
"严格使用",;
函数FcDataListItem(){
返回{
限制:'E',
替换:正确,
要求:“^fcDataList”,
转移:'元素',
模板:`
`,
范围:{
项目:'=?'
},
链接:{
前置:FcDataListItemLink
}
};
函数FcDataListItemLink(范围、元素、属性、fcDataListCtrl){
initVars();
init();
函数initVars(){
}
函数init(){
console.log('FcDataListItem')
console.dir(fcDataListCtrl.actionButtons);
}
}
}
有棱角的
.module('controls.fcDataList.item'[
'组件.fioControlsExtensions.fcDataList.menu'
])
.指令(“fcDataListItem”,fcDataListItem);
})();
(功能(){
"严格使用",;
函数FcItemMenu(){
返回{
限制:'E',
模板:`
{{item.icon}
`,
范围:{
项目:“=?”
},
链接:{
前置:FcItemMenuLink
}
};
函数FcItemMenuLink(范围、元素、属性){
scope.open=打开;
initVars();
init();
函数initVars(){
console.log('MenuItem');
console.dir(scope.items);
}
函数init(){
}
功能打开(事件){
}
}
}
有棱角的
.module('components.fioControlsExtensions.fcDataList.menu',[])
.指令(“fcItemMenu”,fcItemMenu);
})();
(功能(){
"严格使用",;
函数AppCtrl(){
var=这个;
init();
函数init(){
that.fcDataList={
按钮:[
{图标:'ff show'}
],
项目:[
{名字:'Ivan',姓氏:'Petrov',职位:'Zookeeper'},
{名字:'Andrei',姓氏:'Müller',职位:'Pilot'},
{名字:“克里斯蒂安”,姓氏:“克莱恩”,职位:“库克”},
{名字:“彼得”,姓氏:“斯托亚诺夫”,职位:“富勒”},
{名字:“Nadine”,姓氏:“Wolf”,职位:“驾驶教练”},
{姓氏:“Amya”,姓氏:“Krüger”,职位:“军队”}
],
}       
}
}
有棱角的
.module('controls.example'[
'controls.fcDataList'
])
.controller('AppCtrl',AppCtrl)
})();

测试数据列表n
这是一个列表项

fc项目菜单中的
项目
被绑定到
fcDataList.action按钮
。这意味着
fc item menu
指令将在scope.fcDataList.actionButtons中查找它们

让我们后退一步-在
fc data list
指令中,您具有相同类型的绑定-
fcDataList.item
。这是可行的,因为您使用了
bindToController
controllerAs
,这将隔离的作用域放在一个作用域字段中,其名称在
controllerAs
中定义(scope.fcDataList)

返回到
fc项目菜单
:尽管指令中有require:^fcDataList,但由于不存在scope.fcDataList,上述表达式将未定义。此外,这是正确的,因为通过转换,创建了一个独立的作用域,它不携带scope.fcDataList。使其工作的方法是使用控制器中的值自己定义范围属性,如下所示:

function FcDataListItemLink(scope, elem, attrs, fcDataListCtrl) {
    scope.buttons = fcDataListCtrl.actionButtons;
}
这是一个正在工作的plnkr: