Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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 ng重复自定义指令上的对象数组无效_Angularjs_Angularjs Directive_Angularjs Ng Repeat - Fatal编程技术网

Angularjs ng重复自定义指令上的对象数组无效

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

我正在尝试对下面对象的数组使用ng repeat来重复我的自定义指令

 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]”的值。