Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs ES6类指令_Javascript_Angularjs - Fatal编程技术网

Javascript Angularjs ES6类指令

Javascript Angularjs ES6类指令,javascript,angularjs,Javascript,Angularjs,我试图使用类来定义一个指令。html确实显示了,它确实显示了它正在调用ctor和控制器函数。但是,我有一个类方法,我想通过ng单击在html中调用它,但它没有被调用 注意,我正在使用1.3x,此时无法升级 指令: class StoreHours{ constructor(){ console.log("inside ctor"); this.restrict = 'E'; this.templateUrl = 'storeHours.html'; thi

我试图使用类来定义一个指令。html确实显示了,它确实显示了它正在调用ctor和控制器函数。但是,我有一个类方法,我想通过ng单击在html中调用它,但它没有被调用

注意,我正在使用1.3x,此时无法升级

指令:

class StoreHours{

  constructor(){
    console.log("inside ctor");
    this.restrict = 'E';
    this.templateUrl = 'storeHours.html';
    this.bindToController = true;
    this.controllerAs = 'vm';
    this.scope = {
      hours: '=',
      index: '=',
      addNewHour: '&'
    };
  }

  controller(){
    console.log("inside controller");
  }

  // the member metod that I want ng-click to call
  addNew(newHour){
    var vm = this;

    console.log("addNew()");

    vm.addNewHour({ hour: newHour, index: vm.index });

    vm.newHour = "";
  }

  // don't need this but just showing
  link(scope, element, attrs){

  }
}

app.directive('storeHours', () => new StoreHours);
HTML:


我是商店营业时间的组成部分!
  • {{hrs}}
  • 新增
    addNew()
    方法附加到类作用域,无论您是否需要将其附加到
    控制器()
    作用域(这是不同的)

    将该方法添加到控制器中,您应该不会有问题

      controller(){
        console.log("inside controller");
        var vm = this;  
        vm.addNew = function(newHour){
          console.log("addNew()");
          vm.addNewHour({ hour: newHour, index: vm.index });
          vm.newHour = "";
        }
      }
    

    没别的办法了吧?我不喜欢这种语法,但如果没有其他方法,那就行了;那么函数可以在类级别定义吗?基本上,ctor中的“this”与controller()中的“this”是不同的对象,对吗?那么,我想如何从控制器内部获得“this”的ctor呢?我认为这是不可能的,你应该使用函数的作用域,但这不值得。在我看来,更清楚的是,您的控制器方法应该在您的控制器内,并且不会弄乱指令范围。
      controller(){
        console.log("inside controller");
        var vm = this;  
        vm.addNew = function(newHour){
          console.log("addNew()");
          vm.addNewHour({ hour: newHour, index: vm.index });
          vm.newHour = "";
        }
      }