2015-09-05 4 views
2

Новичкам в угловой. Очень простой вопрос. У меня есть следующий код.AngularJS Передача значения от функции директивной ссылки к контроллеру

Я просто хочу показать количество файлов внизу. Я привязываю переменную fileCount к области видимости, но она не работает.

var app = angular.module('fileUploader', []); 
 

 
app.controller('upload', function($scope){ 
 
\t $scope.fileCount = 0; 
 
}) 
 

 
.directive("customDirective", function(){ 
 
\t return{ 
 
\t \t link: function(scope, el, attrs){ 
 
\t \t \t el.bind("change", function(event){ 
 
\t \t \t \t console.log(event.target.files.length); 
 
\t \t \t \t scope.fileCount = event.target.files.length; 
 
\t \t \t }); 
 

 
\t \t } 
 
\t } 
 

 
});
\t <head> 
 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
\t </head> 
 
\t <body> 
 
\t <div ng-app="fileUploader" ng-controller="upload"> 
 
\t \t <input custom-Directive type="file"/> 
 
\t \t <p>The file count is: {{fileCount}}</p> 
 
\t </div> \t \t 
 
\t </body>

ответ

4

директива делает наследуют свойства области действия от своего родителя, но он не знает, чтобы начать цикл дайджеста всякий раз, когда вы меняете ссылку на родительскую собственность, так что вы придется делать это вручную (проверить это working jsbin):

.directive("customDirective", function(){ 
    return{ 
     link: function(scope, el, attrs){ 
      el.bind("change", function(event){ 
       scope.fileCount = event.target.files.length; 

       scope.$apply(); // notice this 
      }); 
     } 
    } 
}); 

это будет стартует цикл дайджеста, и вы увидите, что обновление произойдет, как ожидат Тед.

+0

Спасибо за ваш ответ! – catlovespurple

+0

@catlovespurple, no prob! Рад, что это сработало. –

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