Как обойти ошибку: $compile:nonassign Non-Assignable Expression в компоненте angular 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>

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


person tcmoore    schedule 18.02.2016    source источник


Ответы (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"
})
person Shuhei Kagawa    schedule 18.02.2016