Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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
Javascript “无法读取数据”;objectname";未定义角指令的定义_Javascript_Angularjs - Fatal编程技术网

Javascript “无法读取数据”;objectname";未定义角指令的定义

Javascript “无法读取数据”;objectname";未定义角指令的定义,javascript,angularjs,Javascript,Angularjs,无法将数据从父作用域读取到指令。像这样得到错误 TypeError:无法读取未定义的属性“rowCollection” 你能帮我解决这个问题吗 HTML <div ng-controller="ctrl1 as one"> <ltcg-table options="one.rowCollection"></ltcg-table> </div> <table st-table="rowCollection" class="ta

无法将数据从父作用域读取到指令。像这样得到错误

TypeError:无法读取未定义的属性“rowCollection”

你能帮我解决这个问题吗

HTML

<div ng-controller="ctrl1 as one">
   <ltcg-table options="one.rowCollection"></ltcg-table>     
</div>
<table st-table="rowCollection" class="table table-striped">
    <thead>
    <tr>
        <th>first name</th>
        <th>last name</th>
        <th>birth date</th>
        <th>balance</th>
        <th>email</th>
    </tr>
    </thead>
    <tbody>
    <tr ng-repeat="row in rowCollection">
        <td>{{row.firstName}}</td>
        <td>{{row.lastName}}</td>
        <td>{{row.birthDate}}</td>
        <td>{{row.balance}}</td>
        <td>{{row.email}}</td>
    </tr>
    </tbody>
</table>

您向指令作用域添加了
选项
,因此可以通过
作用域.options
直接访问指令作用域。顺便说一下,指令作用域是隔离的(使用
作用域:{}
表示法),因此您不能只是上去尝试读取父作用域。

因此,您有一个具有隔离作用域的指令。在本例中,
scope
链接函数中的参数引用此作用域,在本例中,下一个对象引用此作用域

{
    'options': '='
}
因此,当您在html中执行操作时,one.rowCollection的值已绑定到options属性,因此要访问它,您应该在link函数中使用
scope.options
,仅在视图中的选项上使用

另外,
$parent
属性设置为parent作用域,在您的情况下为“ctrl1”控制器作用域。所以你们可以直接去控制器,得到你们想要的

当使用控制器作为保存在控制器作用域中的控制器的语法引用时。所以对于访问控制器,您应该使用它的名称

样本:

var myApp=angular.module('myApp',[]);
功能一(){
this.song=“Murali”;
//警报(“gg”);
this.rowCollection=[{
名字:“劳伦特”,
姓氏:“雷纳德”,
出生日期:新日期('1987-05-21'),
结余:102,
电邮:'whatever@gmail.com'
}, {
名字:“布兰丁”,
姓氏:“Faivre”,
出生日期:新日期('1987-04-25'),
余额:-2323.22,
电邮:'oufblandou@gmail.com'
}, {
名字:“弗朗索瓦”,
姓氏:“弗雷尔”,
出生日期:新日期('1955-08-27'),
余额:42343,
电邮:'raymondef@gmail.com'
}];
//警报($scope.gridOptions.columnDefs[1].name);
//警报($scope.gridOptions);
};
myApp.directive('ltcgTable',function(){
返回{
限制:'E',
是的,
范围:{
“选项”:“=”
},
templateUrl:“ltcg table.html”,
链接:功能(范围、元素、属性){
//直接转到控制器
scope.rowCollection=scope.$parent.one.rowCollection
}
}
});
myApp.controller('ctrl1',一个)

名字
姓
出生日期
平衡
电子邮件
从scope.options获取数据
{{row.firstName}
{{row.lastName}
{{row.birthDate}}
{{row.balance}}
{{row.email}

在链接功能中直接从控制器获取保存的数据 {{row.firstName} {{row.lastName} {{row.birthDate}} {{row.balance}} {{row.email}
您能解释一下为什么在警报中尝试
作用域。$parent.options
吗?同时还设置了隔离作用域-
$parent
属性。不工作,谢谢你的回复。只有在设置特定的控制器对象(one.rowCollection)时,上述解决方案才有效。但如果我有多个内容不同的CTRL,我需要动态,比如如何在同一指令中加载不同的CTRL数据。@klmuralimohan,正如您所见,在回答中,我提供了两种方法,如果您使用第一种方法,所有方法都可以很好地工作。看第一段,注意html
@klmuralimohan,我有点更新答案,可能现在更清楚了是的,它工作得很好。伟大的解决方案。非常感谢……:)@klmuralimohan,这可能是
智能表
模块的问题,正如您所看到的,在代码片段中我没有使用它,因为不知道它是什么:)
{
    'options': '='
}