2

Я переключился на использование ES6 (Babel) в своем новом проекте Angular. Классы ES6 не могут иметь переменных. Как мне установить переменную $ scope теперь?Как получить доступ к переменной сферы в угловом контроллере ES6?

Скажем, у меня есть простой контроллер:

class MainController { 
    constructor ($timeout, events) { 
     'ngInject'; 

      this.textMaker = "Hello!" //Option #1 


    } // constructor 

    textMaker(){   //Option #2 
     return "Hello!"; 
    } 


} 


export default MainController; 

Мой HTML выглядит (контроллер aut0matically впрыскивается во время сборки, скажем):

<h1> {{textMaker}}</h1> 

И Вариант № 1 и Вариант № 2 дону» похоже, работает. Я получаю пустой заголовок. Такая простая вещь ... что я делаю неправильно?

+0

'this' будет работать только если вы определили' 'controllerAs' или как' для контроллера, на otherhand могли бы вы попробовать инъекционные' $ scope' и сделать что-то вроде этого 'this. $ scope.whatever' (я не уверен в этом) –

+0

Я определил 'controllerAs' в моем файле ui-router. какова должна быть его ценность? И как это влияет на это? –

+0

Похоже, что возникает недоразумение. Тот факт, что вы используете ES6, ничего не меняет. Вы используете '$ scope' так же, как вы используете его с ES5. ES6 «классы» - это просто синтаксический сахар (пока), а не новая особенность. – zeroflagL

ответ

6

Когда вы назначаете значение для свойства контроллера, вы должны использовать синтаксис controllerAs для контроллера.

  1. controllerAs в маршрутизаторе или директивы:

    controllerAs: 'mainCtrl' // in router or in directive, you still need to state the controller property

  2. controllerAs в ngController:

    <div ng-controller="MainController as mainCtrl">

Получить свойство в HTML:

<h1> {{mainCtrl.textMaker}}</h1> 

Если вы хотите использовать $scope, впрыснуть это нормально, и не использовать controllerAs:

constructor ($scope, $timeout, events) { 

    this.$scope = $scope; // assign $scope to a property of the controller, so it will be available in methods 

    this.$scope.prop = 'value'; // refer to properties on the scope in the constructor or methods 

} 

Html:

<h1> {{textMaker}}</h1> 
+0

Моя проблема заключалась не в том, чтобы указать контроллер в шаблоне. Благодарю. –

0

Позволяет ellobrate немного на ответ выше, класс контроллера ES6, который у вас есть, вы можете создавать функции, которые могут изменять значения со связыванием.

Пример:

class something{ 
constructor(){ 
    this._Name = ''; 
} 
whatIsTheName(){ 
this._Name = 'Unix Rox!' 
} 
export default something; 
} 

Тогда вы просто звоните whatIsTheName() на событие щелчка, это отличный способ, чтобы удалить $ объем от всего кода, это также делает ваш переход к Угловое 2 лучше если вы все еще на угловых 1.

Приветствиях

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