为什么覆盖“控制器”$render `未被调用

Why overridden `controller.$render` is not getting called?

本文关键字:控制器 调用 render 覆盖 为什么      更新时间:2023-09-26

看看这个代码@plnkr.co。在directivelink函数中,调用了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>

在覆盖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();
            }
        }
    };
});