Привязки компонентов Angular 1.5 с неработающим контроллером

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

когда я пытаюсь реализовать контроллер, значение становится неопределенным. Почему это происходит?

Текущий компонент:

module.component('ratingComponent',{

    templateUrl:'jay-movies/movie-rating.component.html',
    bindings: {
        value:"<"
    },
    controllerAs:'vm',
    controller: ($scope)=>{

        let vm = this;

        $scope.entries = new Array($scope.value);
        console.log($scope.entries);

    }
})

<span ng-repeat="stars in entries track by $index ">

*
</span>

<tr ng-repeat="m in data">
			<td>{{m.title}}</td>
			<td>{{m.length}}</td>
			<td>
				<rating-Component value= "m.rating" ></rating-Component>
			</td>
			<td>

поэтому, прежде чем я вставлю свой собственный контроллер, я проверяю, получаю ли я значение, выполняя $ctrl.value, и оно работает (данные JSON из локального файла JSON). Я использую контроллер для отображения приближающегося числа (простые цифры в массиве), которое соответствует символу *, чтобы оно выглядело как рейтинги. Я добавляю другой код, это может помочь увидеть, что я пытаюсь сделать, но я считаю, что проблема связана с моим контроллером. введите здесь описание изображения


person jay chacko    schedule 30.04.2017    source источник
comment
попробуй это ng-repeat="stars in vm.entries track by $index "   -  person Hadi J    schedule 30.04.2017


Ответы (2)


У вас есть несколько ошибок, упомянутых ниже.

  1. Не смешивайте $scope внутри области видимости, если вы используете синтаксис controllerAs. Здесь вы используете компонент, поэтому вам не следует использовать $scope
  2. value bindings будут доступны внутри контекста контроллера. Так что используйте vm.value вместо $scope.value.
  3. Используйте хук $onInit lifecylce при присвоении значения при запуске компонента.
  4. Теперь используйте vm.entries вместо только entries.

Контроллер

controller: ()=>{
    let vm = this;
    $onInit(){
       vm.entries = new Array(vm.value);
       onsole.log(vm.entries);
    }
}
person Pankaj Parkar    schedule 30.04.2017
comment
Ты прав. Я не обратил внимания на использование $scope . спасибо, что упомянули об этом. как всегда, ваш ответ завершен :) - person Hadi J; 30.04.2017
comment
я забыл упомянуть в комментарии, что я пытался использовать контроллер сначала перед областью действия, это та же виртуальная машина, записи все еще не определены. я предполагаю, что ниже приведен правильный синтаксис для $ onInit, он выдает ошибку с вашим кодом. controllerAs: 'vm', controller: ()=›{ let vm = this; vm.$onInit= ()=›{ vm.entries = new Array(vm.value); console.log(vm.entries); } } - person jay chacko; 30.04.2017
comment
@jaychacko, не могли бы вы добавить то же самое, тогда мне было бы полезно копнуть глубже - person Pankaj Parkar; 30.04.2017
comment
dropbox.com/sh/1are8lw8cd1nghn/AAB33vLHxQ3fj7yqP_WROii_a?dl=0 весь код, plunker сегодня не хотел работать, я думаю :) - person jay chacko; 30.04.2017

Я думаю, вы забыли поставить vm перед объектом области. поэтому попробуйте это в шаблоне.

ng-repeat="stars in vm.entries track by $index "
person Hadi J    schedule 30.04.2017
comment
Частично верно ... чтобы это произошло, ОП должен внести несколько изменений. Пожалуйста, проверьте ниже :) - person Pankaj Parkar; 30.04.2017
comment
я связываю записи с $scope.entries , поэтому мне не нужно использовать контроллер vm, верно? Таким образом, я могу увидеть представление, используя vm, мое представление не появляется. при использовании представления области действия появляется, но без данных из значения, потому что и области видимости, и vm.entries дают мне неопределенность при утешении - person jay chacko; 30.04.2017
comment
вы используете для основного контроллера синтаксис controllerAs? Я имею в виду <tr ng-repeat="m in data"> - person Hadi J; 30.04.2017
comment
это была попытка решить эту проблему, возможно, использовать контроллер вместо области, но это создало больше проблем, представление также заблокировано с первой проблемой «значение», данные не определены, поэтому на данный момент я просто использовал область, не использовал контроллер как. я - person jay chacko; 30.04.2017
comment
dropbox.com/sh/1are8lw8cd1nghn/AAB33vLHxQ3fj7yqP_WROii_a?dl=0 весь мой код, если у вас есть время - person jay chacko; 30.04.2017