Там это директива называется foo
, которая определяется следующим образом:Добавление директивы сфера делает остальные не-обновляемыми
<div ng-app="app" ng-controller="mainController">
{{ name }}
<foo param="123"></foo>
</div>
А вот соответствующий фрагмент инициализации:
var app = angular.module('app', []);
app.controller('mainController', function($scope){
$scope.name = 'Initial name';
});
app.directive('foo', function(){
return {
restrict : 'E',
controller : function($scope){
$scope.name = 'Name defined in directive';
console.log($scope.param); // undefined
}
};
});
Это работает, как ожидалось, и переопределение Initial name
с Name defined in directive
.
Однако, поскольку есть атрибут param
, я хотел получить доступ к его значению. Поэтому я сделал один способ привязки следующим образом:
return {
restrict : 'E',
controller : function($scope){
$scope.name = 'Name defined in directive';
console.log($scope.param); // 123 as expected
},
scope : {
param : "@"
}
}
И это сломало обновление родительской области. Теперь при запуске он отображает Initial name
вместо ожидаемого Name defined in directive
. Так в чем проблема?
Двусторонняя привязка к 'name' будет недостаточной, так как это примитивный тип (строка). Это должно быть свойство типа 'model.name' или использовать привязку выражения' on-name-change = "name = newName" ' – floribon
2-way binding работает отлично с строками. Демо: http://plnkr.co/edit/Mcid4CwXFoWXdxCu95ez?p=preview –
Ой, похоже, что вы правы (даже при обновлении переменной из директивы). Я не знаю, почему у меня было предположение, что это не так, извините за вводящий в заблуждение комментарий. – floribon