У меня есть директива, которая использует контроллер ng-model и получает его значение модели от контроллера, внутри которого находится «myController». Я использую transclude = true и ng-transclude. Это директива общего назначения, которую я хочу разрешить своим коллегам повторно использовать. Я хочу, чтобы потребитель нажал кнопку, и установил значение ngModel на любое значение, которое они хотят, но в основном всегда какой-то объект. Как правильно настроить это? Я понимаю внутри директивы, которую я могу назвать ngModel. $ SetValue или $ setViewValue и т. Д. Извините, я до сих пор не знаком с angularjs, в частности директивами. Также должен ли я использовать контроллер внутри директивы? Я знаю, что определение объекта для директив обладает такой способностью, хотя я действительно не знаю, как и когда использовать это. Наконец, нормально ли переводить контроллеры в директивы, как в «nestedInDirController»? Спасибо за любые советы, рекомендации, примеры или советы.В Angularjs может ли контроллер, вложенный внутри директивы, установить ng-модель директивы?
<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"; ' –