从指令的隔离控制器

时间:2015-12-02 15:50:15

标签: javascript angularjs

好的,所以我有一个指令,它接受属性并读取它(并将其写出来)。

plunker现场演示:http://embed.plnkr.co/IkKPLahPc9yqeHWEQUG3/

我认为这是因为控制器: main-directive.js 中的ctrl没有任何内容,而实际操作发生在隔离指令的控制器控制器中。

这是 main-directive.js

var app = angular.module('testapp.directive.main', ['main']);

app.directive('myCustomer', function() {

  var controller = ['$scope', function($scope) {

    $scope.dan = { 'name': 'Chad', 'nationality': 'China' };
    // I want the scope.dan object to be read from here.

  }];

  var template = 'Getting attribute value of =getInfo... {{getInfo.name}} from {{getInfo.nationality}}';

  return {
    restrict: 'E',
    controller: controller,
    scope: {
      getInfo: "=info"
    },
    template: template
  };
});

app.controller('ctrl', function($scope) {
  // adding the $scope.dan object here will work
  // but I don't want it here.
});

这是我的模板:

'mainview@': {
    controller: 'MainCtrl as mainCtrl',
    template: '<div ng-controller="ctrl"><my-customer info="dan"></my-customer></div>'
}

如何制作它以便从指令内的隔离控制器内部读取对象,而不是从控制器“ ctrl ”读取?

感谢。

1 个答案:

答案 0 :(得分:0)

看看这篇文章,它展示了指令和控制器如何共享$ scope。

Behavior of controller inside directives

您似乎对自定义HTML标记的自定义属性感兴趣。我重新格式化了你的指令和控制器,并打印出你感兴趣的info属性。

var app = angular.module('testapp.directive.main', ['main'])
  .directive('myCustomer', function() {

  var template = 'Getting attribute value of =getInfo... {{getInfo.name}} from {{getInfo.nationality}}';

  return {
    restrict: 'E',
    controller: 'ctrl',
    scope: {
      getInfo: "=info"
    },
    template: template
  };
})
.controller('ctrl',['$scope', '$attrs', function($scope, $attrs) {
  $scope.dan = { 'name': 'Chad', 'nationality': 'China' };
  console.log($attrs.info);
}])

希望这有帮助