2015-09-05 107 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 
      }); 
     } 
    } 
}); 

這會揭開序幕,消化週期,你就會看到更新發生,因爲EXPEC特德。

+0

感謝您的回答! – catlovespurple

+0

@catlovespurple,沒有問題!很高興它的工作。 –

相關問題