2015-10-27 2 views
-1

Посмотрите на этот код @plnkr.co. В link функция directive, controller.$render() была вызвана, которая отлично работала. Проблема в том, что когда я переопределяю функцию controller.$render, она не запускается. console.log('overridden $render function called'); не отображается в консоли.

script.js является:

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

app.directive('test', function() { 
    return { 
     require: '?ngModel', 
     link: function ($scope, $element, $attr, controller) { 
      if (!controller) { 
       console.log("controller of ngModel not found"); 
       return; 
      } else { 
       console.log("controller of ngModel found"); 
       controller.$setViewValue('qwerty'); 
       //controller.$render(); 
       controller.$render = function(){ 
        console.log('overridden $render function called'); 
       } 
      } 
     } 
    }; 
}); 

index.html является:

<!DOCTYPE html> 

<html ng-app="myApp"> 
    <head> 
     <meta charset="UTF-8"> 

     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script> 
     <script src="script.js"></script> 

    </head> 
    <body> 
     <div>TODO write content </div> 


     <input test type="text" ng-model="name" > 

     <h1>name: {{name}}</h1> 


    </body> 
</html> 
+3

Вам нужно вызвать 'контроллер $ Render() ; 'и, конечно, после' controller. $ render = function() {' – PSL

ответ

1

Попробуйте вызвать controller.$render() сразу после ее перекрытии:.

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

app.directive('test', function() { 
    return { 
     require: '?ngModel', 
     link: function ($scope, $element, $attr, controller) { 
      if (!controller) { 
       console.log("controller of ngModel not found"); 
       return; 
      } else { 
       console.log("controller of ngModel found"); 
       controller.$setViewValue('qwerty'); 
       //controller.$render(); 
       controller.$render = function(){ 
        console.log('overridden $render function called'); 
       } 
       controller.$render(); 
      } 
     } 
    }; 
});