Angularjs ng重复自定义指令上的对象数组无效
我正在尝试对下面对象的数组使用ng repeat来重复我的自定义指令Angularjs ng重复自定义指令上的对象数组无效,angularjs,angularjs-directive,angularjs-ng-repeat,Angularjs,Angularjs Directive,Angularjs Ng Repeat,我正在尝试对下面对象的数组使用ng repeat来重复我的自定义指令 module.directive('miChart', function () { return { restrict: 'E', template: '<div></div>', scope: { chartData: "=value", char
module.directive('miChart', function () {
return {
restrict: 'E',
template: '<div></div>',
scope: {
chartData: "=value",
chartObj: "=?"
},
replace: true,
link: function ($scope, $element, $attrs) {
$scope.$watch('chartData', function (value) {
if (!value) {
return;
}
$scope.chartData.chart.renderTo = $scope.chartData.chart.renderTo || $element[0];
$scope.chartObj = new Highcharts.Chart($scope.chartData);
});
}
}
});
<div ng-repeat="(key,value) in Competitors">
<mi-chart value="Competitors[key]" chart-obj="Competitors[key]"></mi-chart>
</div>
我的数组如下所示
var Competitors = [];
Competitors.push({
key: 1,
value: {}//Blank object
});
Competitors.push({
key: 2,
value: {}//Blank object
});
Competitors.push({
key: 3,
value: {}//Blank object
});
我的自定义指令
module.directive('miChart', function () {
return {
restrict: 'E',
template: '<div></div>',
scope: {
chartData: "=value",
chartObj: "=?"
},
replace: true,
link: function ($scope, $element, $attrs) {
$scope.$watch('chartData', function (value) {
if (!value) {
return;
}
$scope.chartData.chart.renderTo = $scope.chartData.chart.renderTo || $element[0];
$scope.chartObj = new Highcharts.Chart($scope.chartData);
});
}
}
});
<div ng-repeat="(key,value) in Competitors">
<mi-chart value="Competitors[key]" chart-obj="Competitors[key]"></mi-chart>
</div>
模块指令('miChart',函数(){
返回{
限制:'E',
模板:“”,
范围:{
图表数据:“=值”,
chartObj:“=?”
},
替换:正确,
链接:函数($scope、$element、$attrs){
$scope.$watch('chartData',函数(值){
如果(!值){
返回;
}
$scope.chartData.chart.renderTo=$scope.chartData.chart.renderTo | | |$element[0];
$scope.chartObj=新的Highcharts.Chart($scope.chartData);
});
}
}
});
下面是我试图用指令创建多个图表的代码
module.directive('miChart', function () {
return {
restrict: 'E',
template: '<div></div>',
scope: {
chartData: "=value",
chartObj: "=?"
},
replace: true,
link: function ($scope, $element, $attrs) {
$scope.$watch('chartData', function (value) {
if (!value) {
return;
}
$scope.chartData.chart.renderTo = $scope.chartData.chart.renderTo || $element[0];
$scope.chartObj = new Highcharts.Chart($scope.chartData);
});
}
}
});
<div ng-repeat="(key,value) in Competitors">
<mi-chart value="Competitors[key]" chart-obj="Competitors[key]"></mi-chart>
</div>
当我调试代码时,该指令没有得到确切的值,并将[key]作为值和图表对象提供给竞争对手。因此,它不会替换ng repeat上的值
谁能告诉我我做错了什么,这个问题的解决方案是什么。我这样修改了你的html:
<div ng-repeat="competitor in Competitors track by competitor.key">
<mi-chart value="competitor" chart-obj="competitor"></mi-chart>
</div>
这将导致元素的正确绑定,如下面的代码片段所示。“轨迹按组件”是可选的,但由于您已经有了唯一的可用关键帧值,因此最好使用它。它可以在某些条目更新时提高性能 然而,我不确定这是否是你正在寻找的
var module=angular.module('app',[]);
模块控制器('ctrl',函数($scope){
$scope.Competitors=[];
$scope.Competitors.push({
重点:1,,
值:{}//空白对象
});
$scope.Competitors.push({
重点:二,,
值:{}//空白对象
});
$scope.Competitors.push({
重点:三,,
值:{}//空白对象
});
});
模块指令('miChart',函数(){
返回{
限制:'E',
模板:'------------
chartData-key:{{chartData.key}}值:{{{chartData.value}}}
chartObj-key:{{chartObj.key}}值:{{{chartObj.value}},
范围:{
图表数据:“=值”,
chartObj:“=?”
},
替换:正确,
链接:函数($scope、$element、$attrs){
$scope.$watch('chartData',函数(值){
如果(!值){
返回;
}
//$scope.chartData.chart.renderTo=$scope.chartData.chart.renderTo | | |$element[0];
//$scope.chartObj=新的Highcharts.Chart($scope.chartData);
});
}
}
});代码>
条目:
那么这两个属性之间的区别是什么呢?你想要两个绑定到同一个对象竞争对手[key]
?是的,我需要为value和chart obj属性放置相同的值。无论如何,不清楚你的问题是什么,我测试了,你的代码工作正常,数据绑定正常。我无法发布图像,因为我的声誉很低。但是ng repeat需要用数组中的原始对象替换我的值,而它不需要。我在指令中得到字符串“Competitors[key]”的值。