데이터가 변경될 경우 값을 업데이트 서비스 범위

나는 다음 서비스 내 app:

uaInProgressApp.factory('uaProgressService', 
    function(uaApiInterface, $timeout, $rootScope){
        var factory = {};
        factory.taskResource = uaApiInterface.taskResource()
        factory.taskList = [];
        factory.cron = undefined;
        factory.updateTaskList = function() {
            factory.taskResource.query(function(data){
                factory.taskList = data;
                $rootScope.$digest
                console.log(factory.taskList);
            });
            factory.cron = $timeout(factory.updateTaskList, 5000);
        }

        factory.startCron = function () {
            factory.cron = $timeout(factory.updateTaskList, 5000);
        }

        factory.stopCron = function (){
            $timeout.cancel(factory.cron);
        }
        return factory;
});

그럼 내가 써도 받을시간은 컨트롤러거 다음과 같습니다.

uaInProgressApp.controller('ua.InProgressController',
    function ($scope, $rootScope, $routeParams, uaContext, uaProgressService) {
        uaContext.getSession().then(function(){
            uaContext.appName.set('Testing house');
            uaContext.subAppName.set('In progress');
            uaProgressService.startCron();

            $scope.taskList = uaProgressService.taskList;
        });
    }
);

그래서 내 서비스 업데이트 '파스토리스타스크리스트 기본적으로' 이 '' 를 '$5 초마다 쉐퍼드도 링크됨 파스토리스타스크리스트 스코프스타스크리스트'. 그런 다음 '$ $ 다이제스트' 하지만 ',' 등 여러 가지 방법을 시도한 적용하십시오 변경되는지 파스토리스타스크리스트 '에' 내 '보고' $ 스코프스타스크리스트 컨트롤러거 반영되지 않습니다.

내 템플리트를 비어 있다. 이러한 변화는 전파할 수 있는 내가 어떻게 알아?

해결책

이 문제를 해결할 수 없다 ',' $ 제스쳐놀이처럼 사용하면서 가장 효율적입니다. The way you are 저장할 수 있는 데이터 서비스 변경할 수 있습니다.

문제는 메모리 위치를 바꿀 수 있는 'taskList' 때마다 새로운 가치를 할당하십시오 연결되어 있는 동안 이전 위치를 가리키는 고정되었습니다. "라고 말했다. 이러한 일이 [이 털씨] [1] 에서 볼 수 있습니다.

크롬 먼저 한 뒤 함께 시행하십시오 힙 스냅샷입니다 털씨 읽어들입니다 이 버튼을 클릭할 경우 메모리 위치에 있음을 확인할 수 있는 동안 다른 메모리 위치를 가리키는 범위 가리키는 것은 결코 업데이트되도록 목록.

이 서비스를 제공함으로써 고객의 쉽게 고칠 수 있으면 객체에는 변경할 수 있는 변수가 포함된 (무언가 like '데이터. {작업: [], [], []} x: z:'). 이 경우 &quot data"; 모든 멤버를 변경할 수 있지만 절대 안 할 때마다 변경할 수 있습니다. 그런 다음, 이 데이터를 전달하십시오 변수를 범위 및 as long as you don& # 39, t 클릭하여 오버라이드합니다 할당할지 data&quot 하는 "; 무언가 할 때마다, 데이터 변경률 범위 안에 필드이므로 정보기술 (it) 과 업데이트하고 제대로 알게 됩니다.

[이 털씨] [2] 를 사용하여 위와 같은 예를 fs@snapa 수리입니다 제안됩니다 명이다. 이 상황에서 시청자들은 사용하지 않아도 뭔가 문제가 있는 것을 볼 수 없는 경우 판매업체에서 업데이트되도록 알잖나 all you need to do '는' $ 적용하십시오 유효범위 실행하십시오 업데이트하려면 보기입니다.

이 방법은 일단 비교하십시오 변수를 지정할 필요가 있는 경우에 그 설치 할 때 자주 변화와 관련된 제스쳐놀이처럼 변수가 너무 많다. 이 문제를 파악할 수 있는 유일한 외곽진입 에로남이네 (html), data.&quot &quot 합니다. 그냥 사용할 수 있는 모든 것을 접두사가 변수 이름을 가지고 있습니다.

[1]: http://plnkr.co/edit/TX6w3elHy1bU92XrCRw3? p = 미리봅니다 [2]: http://plnkr.co/edit/TOzKkqwfQ1P0Uj9BvcQN? p = 미리봅니다

해설 (6)

각도 (타다남은 달리, 일부 다른 프레임워크와도) 에 있는 특수 wrapped 객체에는 동기화됨 임상의들의 semi-magically 제공하지 않습니다. 그냥 일반 javascript 객체 및 객체에는 틀렸다니까 조작할 수 있다 ',' a = b 는 변수 var 말하는 것과 'a' 와 'b', '$ link 않는 것' 이 두 값을 스코프스타스크리스트 = 우라프로그르세비치스타스크리스트 연결되지 않습니다.

링크 ',' 각도 '는 이러한 형태의' ing ['$ $ 유효범위 제스쳐놀이처럼' 에 ''] (http://docs.angularjs.org/api/ng.) $ 루츠코프리스코프). '가치' 와 업데이트하십시오 우라프로그르세비치스타스크리스트 가치를 확인할 수 있습니다 '$ 유효범위' 의 경우 변경:

$scope.$watch(function () { return uaProgressService.taskList }, function (newVal, oldVal) {
    if (typeof newVal !== 'undefined') {
        $scope.taskList = uaProgressService.taskList;
    }
});

첫 번째 표현식에서는 전달된 함수가 실행될 때마다 ['$ 다이제스트' 루프] '$ 워치' (http://docs.angularjs.org/guide/concepts) 및 두 번째 인수는 함수은 원하는거요 기도하였나니 신형 및 구형 값입니다.

해설 (8)

39 는 위선으로 확실하지 않지만, 내가 만약 그게 도움말에서는 i& m $ 함수를 스코프스발루스 바인딩해야 예를 들어

angular
  .module("testApp", [])
  .service("myDataService", function(){
    this.dataContainer = {
      valA : "car",
      valB : "bike"
    }
  })
  .controller("testCtrl", [
    "$scope",
    "myDataService",
    function($scope, myDataService){
      $scope.data = function(){
        return myDataService.dataContainer;
      };
  }]);

그 후 DOM) 으로 바인딩하지 루이구요.

<li ng-repeat="(key,value) in data() "></li>

이렇게 $ 제스쳐놀이처럼 코드에서 사용하는 것을 방지할 수 있습니다.

해설 (8)

$ 제스쳐놀이처럼 '또는' no '등이 필요합니다. 간단히 정의할 수 있습니다 다음

uaInProgressApp.controller('ua.InProgressController',
  function ($scope, $rootScope, $routeParams, uaContext, uaProgressService) {
    uaContext.getSession().then(function(){
        uaContext.appName.set('Testing house');
        uaContext.subAppName.set('In progress');
        uaProgressService.startCron();
    });

    $scope.getTaskList = function() {
      return uaProgressService.taskList;
    };
  });

함수의 반환 값의 범위 '그' 가 '때문에' $ 그레타스크리스트 평가하실 우라프로그르세비치스타스크리스트 '의' 모든 변경 (및 업데이트되도록) 를 받을 수 있다.

해설 (0)

가벼운 대안은 하는 동안 컨트롤러거 초기화하지 가입할 notifier 패턴화합니다 설정된 서비스용입니다.

다음과 같은 항목을

app.controller('YourCtrl'['yourSvc', function(yourSvc){
    yourSvc.awaitUpdate('YourCtrl',function(){
        $scope.someValue = yourSvc.someValue;
    });
}]);

및 서비스 같은 일이 있다.

app.service('yourSvc', ['$http',function($http){
    var self = this;
    self.notificationSubscribers={};
    self.awaitUpdate=function(key,callback){
        self.notificationSubscribers[key]=callback;
    };
    self.notifySubscribers=function(){
        angular.forEach(self.notificationSubscribers,
            function(callback,key){
                callback();
            });
    };
    $http.get('someUrl').then(
        function(response){
            self.importantData=response.data;
            self.notifySubscribers();
        }
    );
}]);

이 경우 미세 조정 컨트롤러에서는 새로고치기 서비스에서 더 잘 수 있게 해줍니다.

해설 (2)

가브리엘 피아킨타이 같은 경우 기존 객체에는 변화하는 데이터 흐름, 아니 안본다면 필요하다 "고 말했다.

&gt. 그러나 업데이트 변경일 서비스 데이터 값을 제대로 범위 내의 데이터 서비스를 사용하는 것은 유효범위 컨트롤러거 데이터 변경 (필드) 에 직접 지점임 않습니다. 그 대신 유효범위 값만 가리키십시오 둘러싸여집니다 객체에는 변화하는 것을 깨달았습니다.

다음 코드는 이 더 선택해제합니다 설명해야 한다. 내가 내 예제에서와 변환을 위해 사용하는 NLS 서비스. Http 를 통해 업데이트되도록 NLS 토큰) 을 받고 있다.

서비스:

app.factory('nlsService', ['$http', function($http) {
  var data = {
    get: {
      ressources        : "gdc.ressources",
      maintenance       : "gdc.mm.maintenance",
      prewarning        : "gdc.mobMaint.prewarning",
    }
  };
// ... asynchron change the data.get = ajaxResult.data... 
  return data;
}]);

컨트롤러 및 유효범위 표현식에서는

app.controller('MenuCtrl', function($scope, nlsService)
  {
    $scope.NLS = nlsService;
  }
);

<div ng-controller="MenuCtrl">
  <span class="navPanelLiItemText">{{NLS.get.maintenance}}</span>
</div>

하지만 내가 원하는 건 내 NLS 토큰 1 위의 코드는 작동됨 액세스하려면 직접 (아래 스니핏) 값을 avamar 업데이트되도록 되지 않았다.

app.controller('MenuCtrl', function($scope, nlsService)
  {
    $scope.NLS = nlsService.get;
  }
);

<div ng-controller="MenuCtrl">
  <span class="navPanelLiItemText">{{NLS.maintenance}}</span>
</div>
해설 (0)