Angularjs 将对象数组传递到角度指令

Angularjs 将对象数组传递到角度指令,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我的角度控制器中有一组对象,例如 [{ label: 'label1', data: [{ type: TimelineChart.TYPE.POINT, at: new Date([2015, 1, 1]) }, { type: TimelineChart.TYPE.POINT, at: new Date([2015, 2, 1]) }]

我的角度控制器中有一组对象,例如

[{
   label: 'label1',
   data: [{
             type: TimelineChart.TYPE.POINT,
             at: new Date([2015, 1, 1])
           }, {
             type: TimelineChart.TYPE.POINT,
             at: new Date([2015, 2, 1])
         }]
 }, {
   label: 'label2',
   data: [{
             type: TimelineChart.TYPE.POINT,
             at: new Date([2015, 1, 11])
         }, {
             type: TimelineChart.TYPE.POINT,
             at: new Date([2015, 1, 15])
         }]
 }];
每个对象都有一个日期字段。如何将此对象数组传递到指令中

我试着通过引用传递:

<div id= "chart" my-directive my-data="data"></div>
$scope: {
          myData: '='
        },
link: function($scope, $element, $attrs) {
        function init() {
          var data = $scope.myData;
          var timeline = new TimelineChart($element[0], data);
        }

        $attrs.$observe("myData", init);
      }
然而,它没有起作用。我没有定义


作为属性传入,即my data={{data}并使用JSON.parse$attrs.myData由于日期字段而无法工作。

我认为问题在于数组对象在$scope中丢失。要确认,请使用console.log$scope.myData

并在浏览器控制台中查看它返回的内容,如果未定义,则只需编写console.log$scope;然后运行应用程序。转到浏览器控制台并展开$parent,直到找到myData对象。计算父作用域的数目

如果您在第三个父项下找到它,则使用

$scope.$parent.$parent.$parent.myData而不是$scope.myData


这将起作用:

我认为问题在于数组对象在$scope中丢失。要确认,请使用console.log$scope.myData

并在浏览器控制台中查看它返回的内容,如果未定义,则只需编写console.log$scope;然后运行应用程序。转到浏览器控制台并展开$parent,直到找到myData对象。计算父作用域的数目

如果您在第三个父项下找到它,则使用

$scope.$parent.$parent.$parent.myData而不是$scope.myData


这将起作用:

将数据传递给指令非常简单。我认为你缺少的是范围。您正在使用$scope而不是scope。指令定义对象接受范围而不是$scope。所以你需要做什么

scope: { //make it scope
          myData: '='
        },
link: function($scope, $element, $attrs) {
        function init() {
          var data = $scope.myData;
          var timeline = new TimelineChart($element[0], data);
        }

        $attrs.$observe("myData", init);
      }

以下是

将数据传递到指令非常简单。我认为你缺少的是范围。您正在使用$scope而不是scope。指令定义对象接受范围而不是$scope。所以你需要做什么

scope: { //make it scope
          myData: '='
        },
link: function($scope, $element, $attrs) {
        function init() {
          var data = $scope.myData;
          var timeline = new TimelineChart($element[0], data);
        }

        $attrs.$observe("myData", init);
      }

下面是使用$observe甚至更好的$watch参数来确保定义新值的方法。或通过控制器或服务的承诺我可以确认控制器中定义良好,但由于某些原因,它在我的指令中显示为未定义@charlietfl另外,我已经在使用$observe.Yes,但是$observe可以使用第一个值激发,如果您使用$http创建数据,则不会定义第一个值…使用参数。或使用路由解析,并确保在控制器和指令启动之前,一切都准备就绪。我现在甚至没有调用$http来检索数据。。。我只是在controller中定义它@charlietflUse$observe或更好的$watch参数,以确保定义了新值。或通过控制器或服务的承诺我可以确认控制器中定义良好,但由于某些原因,它在我的指令中显示为未定义@charlietfl另外,我已经在使用$observe.Yes,但是$observe可以使用第一个值激发,如果您使用$http创建数据,则不会定义第一个值…使用参数。或使用路由解析,并确保在控制器和指令启动之前,一切都准备就绪。我现在甚至没有调用$http来检索数据。。。我只是在controller中定义它@查理:你面临的挑战是什么。我已经创造了小提琴,我能看到,我能得到数据,我不能看到你的小提琴;它没有运行,所以我不能说它是否工作。但我知道,即使我在代码中切换到使用Scope,它也不起作用。我可以在控制台中看到数据。请检查一下控制台。您面临的挑战是什么。我已经创造了小提琴,我能看到,我能得到数据,我不能看到你的小提琴;它没有运行,所以我不能说它是否工作。但我知道,即使我在代码中切换到使用Scope,它也不起作用。我可以在控制台中看到数据。请检查一下控制台。