为隔离范围指令为控制器的不同实例创建单个函数副本

时间:2017-04-17 10:44:56

标签: javascript angularjs

说,我有一个带有隔离范围的自定义指令。像这样:

mainApp.directive('student', function() {

    return{
        restrict: 'E',
        template: '<div ng-click="displayName()">Student: <b>{{student.name}}</b> , Roll No: <b>{{student.rollno}}</b></div><br/>',
        scope: {
            student : "=name"
        },
    controller: ['$scope', function($scope){

      $scope.displayName = function(){
        console.log($scope.student.name);
      }

    }] 
    }   

}); 

由于范围是隔离的,我假设每次使用该指令时它都将使用新的$scope实例化一个新的控制器。如果我创建10个指令实例,我将获得10个不同的范围,每个范围都有$scope.displayName()函数的不同副本。这将消耗不必要的内存空间。有没有一种方法可以在Angular中只有一个$scope.displayName的副本?我想做这样的事情:

Student.prototype.displayName = function(){
  console.log(this.student.name);
}

function Student(){
  this.student;
}

拥有单个副本的函数,具有单独的状态变量副本。有关示例,请参阅此pen。虽然这是一个简单的例子,但实际情况有点复杂。

0 个答案:

没有答案