2015-02-20 1 views
0

У меня есть директива, которая содержит три кнопки. Если я ударил один, он должен создать новый экземпляр директивы с собственной областью.Директива, создающая новые директивы с собственным объемом

Эта новая директива должна содержать заголовок, который задан параметром предыдущей кнопки.

ng-click="add('blue'); 

Так директива имеет изолированный объем, установленный:

scope: {}, 
restrict: 'E', 
templateUrl: 'xyz.html' 

и ссылку внутри DDO:

controller: function($scope) { 
    $scope.colorTypes = { 
    "red" : true, 
    "green" : false, 
    "blue" : false 
    } 
} 
link: function(scope, element, attrs) { 
    scope.add = function(color){ 
    colorTypes = { 
     "red": false, 
     "green": false, 
     "blue": false 
    } 
    colorTypes[color] = true; 
    var el = $compile('<my-directive myColor='colorTypes'></my-directive>')(scope); 
    element.parent().append(el); 
    } 
} 

Как я могу получить значение (новый цвет) в $ компилировать новую директиву?

+0

, какое значение вы говорите? 'color' должен быть установлен как атрибут' '? –

+0

только что отредактировал последние строки;) –

+0

что такое 'myColor'? –

ответ

1

Вы делаете почти все правильно, кроме передачи значения :)

Вы можете сделать манипуляции со строками, прежде чем добавить фактическую строку переменной color.

Или (я думаю, более элегантно), вы можете просто создать элемент и добавить атрибут:

link: function(scope, element) { 
    scope.add = function(colorType) { 
    var colorTypes = { 
     "green": false, 
     "red": false, 
     "blue": false 
    }; 
    colorTypes[colorType] = true; 

    var newElem = angular.element("<my-colors>"); 

    var childScope = scope.$new(false); // create a child scope for the directive 
    childScope.colorTypes = colorTypes; 

    $compile(newElem)(childScope); 

    element.parent().append(newElem); 
    } 
} 
+0

Можете ли вы отредактировать вопрос, чтобы лучше описать '' (использует ли он изоляционную область? Зачем нужна дочерняя область?), А также родительская директива с кнопками - как создаются эти кнопки и где объект, который вы хотите передать, исходит от кнопок –

+0

, создайте с помощью кнопки установки ng-repeat, чтобы> name <и выделить состояние по ng-классу, если true. –

+0

@SvenKoluem, я действительно думаю, что вы должны отредактировать исходный вопрос и добавить подробности о том, что '' my-directive> 'делает/ожидает независимо от того, как он создается. Плункер помог бы. На данный момент я не совсем понимаю вашу проблему. –

0

Не уверен, что именно о вашей желаемой конечной точке, но это показывает, как использовать значение:

scope: { 
    myColor: "=" 
}, 
link: function(scope, element, attrs) { 
     scope.addDirective = function(color){ 
     var el = $compile('<my-directive myColor=\'{{color}}\'></my-directive>')(scope); 
     element.parent().append(el); 
     } 
} 

Уведомления вы должны иметь myColor в объеме, так как директива ожидает его.

Fiddle

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