У меня есть директива, которая использует контроллер ng-model и получает значение модели от контроллера, который находится внутри, «myController». Я использую transclude = true и ng-transclude. Это директива общего назначения, которую я хочу разрешить моим коллегам повторно использовать. Я хочу, чтобы потребитель щелкнул кнопку, и он установил значение ngModel на любое значение, которое они хотят, но в основном всегда какой-то объект. Как мне это правильно настроить? Я понимаю, что внутри директивы я могу вызвать ngModel. $ SetValue или $ setViewValue и т.д. Извините, я все еще новичок в angularjs, в частности директивах. Также я должен использовать контроллер внутри директивы? Я знаю, что определение объекта для директив имеет такую возможность, хотя на самом деле не знаю, как и когда использовать это. Наконец, можно ли включать контроллеры в директивы, как в "nestedInDirController"? Спасибо за любые советы, уловки, примеры или советы.
<div ng-controller="myController">
<div foo-directive="" ng-model="viewModel.foo">
<div ng-controller="nestedInDirController">
<various-controls-in-here />
</div>
</div>
</div>
angular.module('myApp', [])
.directive('fooDirective', function(){
var template = '<div><div ng-transclude></div> <button ng-click="someFunc()">I want to update ng-model in the directive, which in turn will update myController $scope.viewModel.foo</button></div>';
return {
transclude: true,
require: '?ngModel',
template: template,
compile: function(tElement, tAttrs, transclude){
return function(scope, element, attrs, ngModel){
}
}
};
});
function myController($scope){
$scope.viewModel = { foo : { bar: 'baz'}};
}
function nestedInDirController($scope){
$scope.someFunc = function(){
alert('I was called');
//how can I set ng-model in foo-directive from this controller?
}
}
nestedInDirController
уже имеет доступ к свойствам, определенным в областиmyController
, потому что область прототипически наследуется. Внутри вашегоnestedInDirController
это работает:console.log($scope.viewModel)
и то же самое:$scope.viewModel.foo.bar = "testing";
- person Mark Rajcok   schedule 21.06.2013