angularjs следит за изменением переменной области видимости, сделанным из другого контроллера

0

У меня есть следующая услуга

function PathFactory() {
    this.path = null;
    this.setPath = function(path) {
        this.path = path;
    }
    return this;
}

Мой контроллер навигации:

function NavController($scope, PathFactory) {

    list = document.getElementsByTagName("ul");
    list = list[0];

    var items = list.getElementsByTagName("li");
    for(var i = 0 ; i < items.length ; i++) {
        items[i].setAttribute("navIndex", i);
        items[i].addEventListener("click", navClick);
    }

    function navClick(e) {
        switch(e.path[1].hash) {
            case "#home":
                PathFactory.setPath("home");
                break;
            case "#bots":
                PathFactory.setPath("bots");
                break;
            case "#servers":
                PathFactory.setPath("servers");
                break;
            case "#status":
                PathFactory.setPath("status");
                break;
        }
    }
}

И мой контроллер контента:

function ContentController($scope, PathFactory) {

    $scope.$watch(function() {
        return PathFactory.path;
    }, function (newValue) {
        alert("changed value");
    });

}

$ Scope. $ Watch не запускает функцию, если значение PathFactory.path должно быть изменено контроллером навигации, каким-либо образом я могу заставить эту настройку работать?

Привет, ребята.

  • 0
    После изменения в NavController, ContentController будет вызывать или нет?
  • 0
    Не называется. нет.
Показать ещё 2 комментария
Теги:

1 ответ

2

Если вы хотите, чтобы AngularJS вызывал метод $watch(), вам нужно вызвать метод $apply() вручную.

Угловая двусторонняя привязка данных работает только потому, что все, что меняет что-либо в $scope также вызывает метод $apply. Таким образом Angular знает, что что-то изменилось.

Попытайтесь поместить эту строку кода $scope.$apply(); в конце вашей функции navClick.

Но вы обязательно должны использовать директиву для прослушивателей событий и/или DOM-Manipulation

  • 1
    Блестяще, отлично сработало - спасибо!
  • 0
    Кстати, функция navClick может быть более динамичной, если вы переключите переключатель следующим образом: PathFactory.setPath(e.path[1].hash.substr(1));
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню