Как привязать переменную к объектам в AngularJS?

В приведенном ниже коде и после использования bind (this) я смог использовать this.name в configureItemScope.

Однако, когда я вызываю updatename (), значение itemScope.item не обновляется. вроде это не привязка к this.name?

module.controller('ListController', function () {
    this.name = "initial";
    this.delegate = {
        configureItemScope: function (index, itemScope) {
            itemScope.item = this.name;
        }.bind(this)};
    this.updatename = function(){ this.name = "changed"; }.bind(this)
});

При нажатии на кнопку значения не изменяются: https://codepen.io/scatman007/pen/PywGor

<ons-page ng-controller = "ListController as list">
 <ons-button ng-click = "list.change()">click to change</ons-button>
  <ons-list>
    <ons-list-item ons-lazy-repeat = "list.delegate">{{ item }}</ons-list-item>
  </ons-list>
</ons-page>

JS

ons.bootstrap()
  .controller('ListController', function() {
   this.delegate = {
      configureItemScope: function(index, itemScope) {itemScope.item = "OLD";},
      countItems: function() {return 0;}
    };

    this.change = function()
     {
      this.delegate.configureItemScope= function(index, itemScope) {
           itemScope.item = "NEW";
      }
      this.delegate.countItems= function() { return 1000;}
     }.bind(this);

  });

Я отредактировал вопрос, использую bind (this), но у меня проблема с привязкой

scatman 29.09.2018 14:43

Есть две функции, использующие это. Вы связали одного.

jonrsharpe 29.09.2018 14:44

о да имеет смысл! однако он все еще не работает после привязки имени обновления к этому

scatman 29.09.2018 15:18

Вам следует избегать привязки this и использовать синтаксис controller-as и некоторую переменную viewModel vm для контроллеров. Кроме того, почему itemScope.item должен обновлять свое значение автоматически, он просто привязывается к this и не слушает событие изменения this.name.

Shantanu 29.09.2018 20:25

На самом деле я использую controller-as. Можете ли вы опубликовать образец кода для обновления itemScope, прослушивая событие изменения для this.name? другими словами, как я могу изменить this.delegate и привязать изменение к моему html: <ons-list-item ons-lazy-repeat = "list.delegate"> {{item}} </ons-list-item>

scatman 30.09.2018 19:43

Задавая вопрос о проблеме, вызванной вашим кодом, вы получите гораздо лучшие ответы, если предоставите код, который люди могут использовать для воспроизведения проблемы. Этот код должен быть… Полный - Предоставьте все части, необходимые для воспроизведения проблемы, включая HTML и используемые библиотеки. См. Как создать минимальный, полный и проверяемый пример,

georgeawg 01.10.2018 18:23

@georgeawg это мой код: codepen.io/scatman007/pen/PywGor

scatman 02.10.2018 08:54
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
1
8
56
1

Ответы 1

Из Документов:

AngularJS modifies the normal JavaScript flow by providing its own event processing loop. This splits the JavaScript into classical and AngularJS execution context. Only operations which are applied in the AngularJS execution context will benefit from AngularJS data-binding, exception handling, property watching, etc...

You can also use $apply() to enter the AngularJS execution context from JavaScript. Keep in mind that in most places (controllers, services) $apply has already been called for you by the directive which is handling the event. An explicit call to $apply is needed only when implementing custom event callbacks, or when working with third-party library callbacks.

Для получения дополнительной информации см. Руководство разработчика AngularJS - Интеграция с циклом событий браузера.

Я попытался добавить $ scope. $ apply (), но все равно не работал. кстати, вот мой код: codepen.io/scatman007/pen/PywGor

scatman 02.10.2018 08:59

Другие вопросы по теме