我有服务模块,它读取JSON文件并返回JSON数据。 这是代码
redux-electron-ipc
我在我的指令中获取此数据并将其分配给我的$ scope变量。
angular.module('serviceModule').service('dataService',["$http",function($http){
return {
getData:function(file){
return $http.get('url to json file').then(function(response) {
return response.data;
});
}
所以我的主要问题是我有另一个控制器,它将位置的值更改为JSON值'但是当我刷新网页时,此更改并未立即反映出来然后只有那些变化才会反映出来 我已经尝试使用watcher实现但是它会不断地抛出ERROR并且我的浏览器变得没有响应。 任何人都可以帮助我在“位置到JSON值
中发生变化时立即反映变化我的一些人问你的HTML指令。在指令中,我正在做
angular.module('xyz').directive('xyz',function(dataService){
return {
templateUrl:'hfhf',
controller:'hgf',
link:function($scope){
console.log("Hi");
$scope.tasks=[];
dataService.getData('location to json file').then(function(data){
$scope.tasks=data;
});
在这里我使用ngDragDrop这就是为什么我添加了那些工作正常的标签。我只是迭代完成所有任务。
答案 0 :(得分:2)
根据要求,我发表评论作为答案,因为它适用于OP。
我不确定我是否完全理解你的问题,但请看看$ broadcast / $ emit和$ on。当您的控制器进行更改时,发布带有$ broadcast或$ emit的消息,然后连接您的指令以使用$ on侦听该事件。这是一个很棒的SO链接:Working with $scope.$emit and $scope.$on
我将借用链接在这里给出一个概述:
$broadcast
- 将事件向下调度到所有子范围
$emit
- 通过范围层次结构向上调度事件。
所以使用的一个简单例子是:
function firstCtrl($scope)
{
$scope.$broadcast('someEvent', [1,2,3]);
}
function secondCtrl($scope)
{
$scope.$on('someEvent', function(event, mass) { console.log(mass); });
}
答案 1 :(得分:0)
我只使用
dataService
将数据发布到网址,但是来自不同的控制器。我不知道如何在网址发生数据更改时通知
这个问题有几种方法。一种是在服务中保留本地副本,并在本地副本上使用观察者。
app.service('dataService',function($http){
var dataService = this;
this.localCopy = {};
this.getData = function(url){
return $http.get(url).then(function(response) {
dataService.localCopy[url] = response.data;
return response.data;
});
};
this.postData = function(url, data) {
dataService.localCopy[url] = data;
return $http.post(url,data).then(function (response) {
return response.data;
});
};
});
该指令可以将观察者放在数据的本地副本上。
app.directive('xyz',function(dataService){
return {
templateUrl:'hfhf',
controller:'hgf',
link: function(scope){
console.log("Hi");
dataService.getData(url);
scope.$watch(
function() {return dataService.localCopy[url]},
function (newValue) { scope.tasks = newValue;}
);
}
}
});
通过观察服务中数据的本地副本,该指令将看到该服务的其他用户创建的更改。
答案 2 :(得分:-2)
试试这个:
dataService.getData('location to json file').then(function(data){
$scope.tasks=data;
$scope.$apply();
});
这将强制执行摘要周期并更新所有观察者,确保范围内的更改反映在您的视图中。