Я получаю нечетное поведение при использовании templateUrl
в моей угловой директиве.Предоставление шаблонаUrl делает невозможным получение значений атрибутов в контроллере директивы
В принципе, когда я предоставляю templateUrl
, я не могу получить доступ к оцениваемым атрибутам из функции ссылки или контроллера директивы. Функция ссылки просто возвращает не оцененное выражение (например, {{input.text}}
), а контроллер получает undefined
.
Проще продемонстрировать, используя скрипку, чем объяснять, поэтому я создал очень простой пример here. Откройте консоль & Обратите внимание на выход, затем закомментируйте свойство templateUrl
и запустите скрипку, чтобы увидеть разницу. Обратите внимание, что это не происходит, если вы перемещаете шаблон из кеша и в свойство template
. Может ли кто-нибудь объяснить, что дает изменения templateUrl
, чтобы вызвать такое поведение?
Для полноты вот код:
HTML:
<div ng-controller="MyCtrl">
Text1<input ng-model="input.text"/>
<div d-nested="" d-attr2="{{input.text}}"></div>
</div>
JS:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.input = {};
$scope.input.text = "some string";
}
myApp.run(['$templateCache', function($templateCache) {
return $templateCache.put('/partials/rhombus.html',
'<span>Just a template.</span>');
myApp.directive('dNested', function(){
return {
transclude: false,
//Comment out the below line to observe the difference.
templateUrl: '/partials/rhombus.html',
replace: false,
controller: function($attrs, $scope){
this.logAttr = function(){
console.log("from controller: " + $attrs.dAttr2);
}
},
link: function(scope, element, attrs, ctrl){
attrs.$observe('dAttr2', function(val){
console.log("from link function: " + val);
ctrl.logAttr();
});
}
}
});
Update
После полезный ответ от Мартина ниже, я вижу, что он работает сейчас, но не тогда, когда ives вложены (т. один переводится внутри другого). См. updated fiddle here. Вы по-прежнему заметите, что комментарий шаблона url приведет к правильному поведению.
Хм, спасибо, я попробую модернизировать - я использую 1.0.7 локально в данный момент, хотя и до сих пор вижу подобное. Я скоро посмотрю. –
Я сменил вашу скрипку на 1.0.5: http://jsfiddle.net/pjqap/5/ – Martin
Так что, обновив версию, она исправлена с исходной проблемой (подтвердил этот ответ), однако у меня все еще есть проблема, когда два директивы вложены. См. Обновленную скрипту, которую я свяжу с моим оригинальным вопросом. –