如何在不使用angularJS中的$ scope的情况下将对象从控制器传递到指令

时间:2014-08-19 20:50:20

标签: angularjs angularjs-directive

Plunker链接:http://plnkr.co/edit/j7BeL72lwHISCIlwuAez?p=preview

在上面的链接中,我使用$ scope来传递数据。但我想使用模型方法并将MainController中的$ scope.data替换为this.data

var app = angular.module(' plunker',[]);

app.controller('MainCtrl', ['$scope',
  function($scope) {
    $scope.data = [{
      time: '8/19/2014',
      id: 123,
      text: 'first'
    }, {
      time: '8/18/2014',
      id: 456,
      text: 'second'
    }, {
      time: '8/17/2014',
      id: 123,
      text: 'third'
    }];
  }
]);

app.directive('scrollGrid', [

  function() {
    return {
      restrict: 'AE',
      scope: {
        data: '='
      },
      templateUrl: 'mainScroll.html',
      controller: 'gridController',
      controllerAs: 'gridCtrl'
    }
  }
]);

app.controller('gridController', ['$scope',
  function($scope) {}
])

1 个答案:

答案 0 :(得分:2)

您可以详细了解'控制器作为语法'这里: http://toddmotto.com/digging-into-angulars-controller-as-syntax/

请注意这个语法是在角度1.2中引入的。你的傻瓜使用角度1.0.x。

以下是plunkr示例:http://plnkr.co/edit/5ddLyuRlyCt4PqulpOJG

标记已修改如下:

<body ng-controller="MainCtrl as ctrl">
    {{ctrl.data}}
    <scroll-grid data="ctrl.data"></scroll-grid>
</body>

控制器已修改如下:

app.controller('MainCtrl', function() {
    this.data = [
        {
            time: '8/19/2014',
            id : 123,
            text : 'first'
        },
        {
            time: '8/18/2014',
            id : 456,
            text : 'second'
        },
        {
            time: '8/17/2014',
            id : 123,
            text : 'third'
        }
    ];
});

如果仍然遇到问题,请告诉我