2013-10-14 2 views
0

Я получаю нечетное поведение при использовании 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

Это похоже на ошибку в используемой вами угловой версии (скрипка использует 1.0.1). Он работает правильно, если вы обновляетесь до версии 1.0.5 или новее.

+0

Хм, спасибо, я попробую модернизировать - я использую 1.0.7 локально в данный момент, хотя и до сих пор вижу подобное. Я скоро посмотрю. –

+0

Я сменил вашу скрипку на 1.0.5: http://jsfiddle.net/pjqap/5/ – Martin

+0

Так что, обновив версию, она исправлена ​​с исходной проблемой (подтвердил этот ответ), однако у меня все еще есть проблема, когда два директивы вложены. См. Обновленную скрипту, которую я свяжу с моим оригинальным вопросом. –

Смежные вопросы