обновить заводское значение при изменении данных контроллера

0

У меня есть завод в моем приложении:

dashboard.factory('ProxyStatusFactory', ['$resource','CodisData', function ($resource,CodisData) {
    return $resource('http://' + CodisData.Addr + '/api/proxy', {}, {
            query:{ method: 'GET', url : 'http://' + CodisData.Addr + '/api/proxy/list', isArray: true },
              setStatus:{ method: 'POST' }
          });
}]);

CodisData является угловым значением

dashboard.value("CodisData",{"Name":"NA","Addr":"NA"});

то я использую его в своем контроллере следующим образом:

    $scope.codis_name = selected.Tag;
    $scope.codis_addr = selected.Addr;
    CodisData.Addr = selected.Addr;
    $scope.proxy_array = ProxyStatusFactory.query();

я изменил CodisData.Addr, но в ProxyStatusFactory ресурс $ также возвратил ' http://na/api/proxy '

поэтому, когда CodisData изменяется, как синхронизированное обновление ProxyStatusFactory и возвращает правильный $ resource?

Теги:
factory

1 ответ

0
Лучший ответ

попробуй это:

dashboard.factory('ProxyStatusFactory', ['$resource', function ($resource) {
    return $resource('http://:addr/api/proxy/', {}, {
        query: {
            method: 'GET', 
            url: 'http://:addr/api/proxy/list',
            params: {},
            isArray: true
        },
        setStatus:{ method: 'POST' }
    });
}]);

затем используйте в контроллере следующее:

ProxyStatusFactory.query({addr: CodisData.Addr});

Двигаясь вперед с объяснением... угловая фабрика/сервис - это одиночные игры, поэтому они создаются только ОДИН. Таким образом, http url также создается только один раз, исходя из текущего значения CodisData.Addr. Вот почему + CodisData.Addr + изменяется на :addr чтобы сделать эту часть URL- + CodisData.Addr + настраиваемой....

Надеюсь, это поможет :)

@Обновить

проверяется на локальном проекте и вводит переменные в url-часть, работает, как ожидалось, но когда желаемый url является внешним отдыхом api, тогда он терпит неудачу с сообщением, которое вы описываете.

В этом случае вы можете динамически создавать объект $ resource. Вот jsfiddle с рабочей фабрикой, которая динамически создает ресурсы. https://jsfiddle.net/qwetty/mxrz2cxh/13/

  • 0
    спасибо за вашу помощь, но я поддерживаю ваш заказ, кажется, не работает XMLHttpRequest cannot load http://:addr/api/proxy/list. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource. но я изменяю его следующим образом query:{ method: 'GET', url:':addr/api/proxy/list', isArray: true }, это сработало. LHttpRequest cannot load %310.0.0.1:6000/api/proxy/list. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource. как добавить http:// ?
  • 0
    Вы уверены, что вызываете свою фабрику с правильными аргументами: ProxyStatusFactory.query({addr: CodisData.Addr}); ? Важно иметь {addr: CodisData.Addr} внутри метода query .
Показать ещё 1 комментарий

Ещё вопросы

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