2015-12-02 5 views
0

ОК, поэтому у меня есть директива, которая берет атрибуты и читает ее (и записывает ее).Получение значения атрибута из изолированного контроллера директивы

plunker демо: http://embed.plnkr.co/IkKPLahPc9yqeHWEQUG3/

Я думаю, что это из-за контроллера: Ctrl внутри главных-directive.js, который не имеет ничего, тогда как фактическое действие происходит внутри контроллера изолированной директивы контроллера.

Вот это основные-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. 
}); 

и вот мой шаблон для него:

'[email protected]': { 
    controller: 'MainCtrl as mainCtrl', 
    template: '<div ng-controller="ctrl"><my-customer info="dan"></my-customer></div>' 
} 

Как сделать так, он считывает объекты внутри изолированного контроллера внутри директивы и NOT от контроллера 'ctrl'?

Спасибо.

ответ

0

Взгляните на это сообщение, которое показывает, как директивы и контроллеры делят $ scope.

Behavior of controller inside directives

Похоже, что вы заинтересованы в пользовательских атрибутов данных для вашего пользовательского HTML тегов. Я переформатировать вашу директиву и контроллер и распечатать информацию атрибуты, что вы, кажется, заинтересованы.

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); 
}]) 

Надеется, что это помогает

+0

Ну .. вся причина у меня был контроллер изоляции внутри директивы была для модульного тестирования. Имея контроллер таким образом ... он не делает его многоразовым, нет? – red

+0

Я не совсем уверен, что вы подразумеваете под многоразовым. Для экземпляра вы можете, конечно, повторно использовать контроллер, указав 'controller: 'ctrl'' из любой директивы. – phix

+0

Вы правы. Я думал о том, что контроллер должен быть изолирован, это должно быть ВНУТРИ директивы. Но какова цель иметь его внутри директивы? В любом случае, благодарю Вас. – red

Смежные вопросы