나는 다음 서비스 내 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:'). 이 경우 " data"; 모든 멤버를 변경할 수 있지만 절대 안 할 때마다 변경할 수 있습니다. 그런 다음, 이 데이터를 전달하십시오 변수를 범위 및 as long as you don& # 39, t 클릭하여 오버라이드합니다 할당할지 data" 하는 "; 무언가 할 때마다, 데이터 변경률 범위 안에 필드이므로 정보기술 (it) 과 업데이트하고 제대로 알게 됩니다.
[이 털씨] [2] 를 사용하여 위와 같은 예를 fs@snapa 수리입니다 제안됩니다 명이다. 이 상황에서 시청자들은 사용하지 않아도 뭔가 문제가 있는 것을 볼 수 없는 경우 판매업체에서 업데이트되도록 알잖나 all you need to do '는' $ 적용하십시오 유효범위 실행하십시오 업데이트하려면 보기입니다.
이 방법은 일단 비교하십시오 변수를 지정할 필요가 있는 경우에 그 설치 할 때 자주 변화와 관련된 제스쳐놀이처럼 변수가 너무 많다. 이 문제를 파악할 수 있는 유일한 외곽진입 에로남이네 (html), data." " 합니다. 그냥 사용할 수 있는 모든 것을 접두사가 변수 이름을 가지고 있습니다.
[1]: http://plnkr.co/edit/TX6w3elHy1bU92XrCRw3? p = 미리봅니다 [2]: http://plnkr.co/edit/TOzKkqwfQ1P0Uj9BvcQN? p = 미리봅니다
각도 (타다남은 달리, 일부 다른 프레임워크와도) 에 있는 특수 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) 및 두 번째 인수는 함수은 원하는거요 기도하였나니 신형 및 구형 값입니다.
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>
이렇게 $ 제스쳐놀이처럼 코드에서 사용하는 것을 방지할 수 있습니다.
$ 제스쳐놀이처럼 '또는' 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;
};
});
함수의 반환 값의 범위 '그' 가 '때문에' $ 그레타스크리스트 평가하실 우라프로그르세비치스타스크리스트 '의' 모든 변경 (및 업데이트되도록) 를 받을 수 있다.
가벼운 대안은 하는 동안 컨트롤러거 초기화하지 가입할 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();
}
);
}]);
이 경우 미세 조정 컨트롤러에서는 새로고치기 서비스에서 더 잘 수 있게 해줍니다.
가브리엘 피아킨타이 같은 경우 기존 객체에는 변화하는 데이터 흐름, 아니 안본다면 필요하다 "고 말했다.
>. 그러나 업데이트 변경일 서비스 데이터 값을 제대로 범위 내의 데이터 서비스를 사용하는 것은 유효범위 컨트롤러거 데이터 변경 (필드) 에 직접 지점임 않습니다. 그 대신 유효범위 값만 가리키십시오 둘러싸여집니다 객체에는 변화하는 것을 깨달았습니다.
다음 코드는 이 더 선택해제합니다 설명해야 한다. 내가 내 예제에서와 변환을 위해 사용하는 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>