Отвечая на другой вопрос, я понял, что не смог передать дочерние модели родительской директиве через свой атрибут.
Учитывая эту установку:
<form child-watch mod="inputModel" name="form"><!--ignore creepy directive name-->
<input type="text" name="one" ng-model="inputModel.one">
<input type="text" name="two" ng-model="inputModel.two"><br/>
<input type="submit" ng-disabled="form.$pristine">
<p>Original Model: {{original}}</p>
<p>Isolate Scope Model: {{isolate}}</p>
</form>
Как $watch
в inputModel в пределах директивы через его атрибут, а также просматривать изменения, сделанные детьми? Если я использую область выделения, она будет только $ смотреть на родительскую модель, которая теперь не зависит от изолированных детей.
Очевидно, что это не работает, но вы можете видеть направление, я буду:
app.directive('childWatch', function(){
return {
// removing the isolate scope allows parent scope.inputModel to update
scope:{
mod: "="
},
link: function(scope, element, attrs){
//this does not reflect change upon the parent scope.inputModel
//if using isolate scope. AND, I don't want to $watch a specific
// model, because the directive needs to be reusable. It needs to watch
// an attribute that references the model.
scope.$watch('inputModel', function(val){
scope.original = val;
},true)
//this only has access to the parent scope.inputModel
scope.$watch('mod', function(i){
scope.attribute = i;
}, true)
}
}
})
Для того, чтобы сделать директиву для повторного использования для различных моделей, я не могу просто смотреть конкретную модель. Он должен следить за атрибутом, который ссылается на модель. Я не уверен, что это возможно. Есть идеи?
Here's the plunk Я возился с.
Хе. Я рассуждал о том, чтобы не делать этого, думая с несколькими формами/директивами на странице, что они не могут использовать одну и ту же модель. НО эта изоляция делает эту работу. Спасибо. – rGil
Перед тем, как проверить - lemme ask - есть ли способ сделать это без выделения? Просто посмотреть атрибут $ eval'd? – rGil
@rGil, да, вы можете использовать $ parse - см. Stackoverflow.com/a/15725402/215945 –