Как обойти ошибку: $compile:nonassign Невозможное выражение в угловом компоненте 1.5

Так что я относительно новичок в компонентах, привязках и парадигме Angular 2. Я хочу подготовить приложение Angular 1.3 к передаче, поэтому я пытался принять новую директиву компонента.

Я не смог обойти ошибку невыделения привязки, хотя!

Вот где я включаю компонент:

<schedule currentSchedule="[]" class="panel"></schedule>

И сам компонент:

app.component('schedule', {
bindings: {
    currentSchedule: "="
},
controllerAs: 'SchedCtrl',
controller: function(Schedules) 
{

    var scope = this

    Schedules.refresh()
    .then(function(result) {
        scope.currentSchedule = result
    })
},
templateUrl: "templates/schedule.html"
})

И шаблон компонента:

<div ng-repeat="apt in SchedCtrl.currentSchedule | orderBy: 'App_DtTm'">
    {{apt.name}}
</div>

Я чувствую, что упускаю что-то очень очевидное здесь. Любая помощь будет принята с благодарностью.

1 ответ

Решение

Ошибка означает, что вы пытаетесь присвоить значение выражению [] через двустороннюю привязку.

https://docs.angularjs.org/error/$ compile / nonassign

Если вам действительно нужна двусторонняя привязка, используйте свойство родительской области.

<schedule currentSchedule="parentCtrl.currentSchedule" class="panel"></schedule>

Если вам не нужна двусторонняя привязка, используйте < вместо = и отделить первоначальный график и текущий график.

app.component('schedule', {
  bindings: {
    initialSchedule: "<"
  },
  controllerAs: 'SchedCtrl',
  controller: function(Schedules) 
  {

    var scope = this
    scope.currentSchedule = scope.initialSchedule

    Schedules.refresh()
      .then(function(result) {
        scope.currentSchedule = result
    })
  },
  templateUrl: "templates/schedule.html"
})
Другие вопросы по тегам