2016-05-27 6 views
0

Я устанавливаю машинопись в угловом проекте. Для того, чтобы объявить контроллер я использую следующий синтаксис:Угловой и машинописный: правильный способ ссылки 'this'

module app { 

    class MyController { 
     public myvar: boolean; 

     constructor() { 
      this.myvar= false; 
     } 
    } 
    angular.module("app").controller("MainController", [MainController]); 
} 

Пожалуйста, обратите внимание, что я не впрыснуть сферу, я только использовать внутренние свойства/методы контроллера. Но я не хотел, чтобы получить доступ к свойствам с «этим», как правило, я должен заявить:

var vm = this. 
vm.myvar = ... 

Однако это раздражает, как у меня есть много методов; Я должен объявить это в любом случае, это повторяется.

Есть ли лучшая практика и/или шаблон, чтобы объявить «vm» только один раз?

ответ

1

Но я не хотел, чтобы получить доступ к свойствам с «этим», как правило, я должен объявить var vm = this ... Есть ли лучшая практика и/или шаблон для того, чтобы объявить "ВМ только один раз ?

Пришло время отказаться от этой практики. В TypeScript легко просто использовать и не назначать this переменной - она ​​уже определена для вас, поэтому приятно использовать ее.

Ключ при выполнении этого заключается в использовании функций стрелок, чтобы убедиться, что вы всегда используете экземпляр класса this, а не this, связанный с регулярным выражением функции.

class MyController { 
    myVar = false; 

    someOtherMethod() { 
     // good 
     functionWithCallback(() => { 
      // this will be the class instance 
      console.log(this.myVar); 
     }); 

     // bad 
     functionWithCallback(function() { 
      // this will not be the class instance 
      console.log(this.myVar); 
     }); 

     // good 
     functionWithCallback(() => this.myOtherMethod()); 

     // bad, `this` in myOtherMethod is not the class instance 
     functionWithCallback(this.myOtherMethod); 
    } 

    myOtherMethod() { 
     console.log(this.myVar); 
    } 
} 

function functionWithCallback(callback: Function) { 
    callback(); 
} 
+0

так просто, но так мощно спасибо – Rolintocour

Смежные вопросы