我的应用程序中有以下服务:
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;
});
}
);
因此,基本上我的服务factory.taskList
每5秒更新一次,因此我将其链接factory.taskList
到$scope.taskList
。然后$apply
,我尝试了类似的不同方法,$digest
但是对factory.taskList
所做的更改未反映在控制器和视图中$scope.taskList
。
它在我的模板中仍然为空。您知道我如何传播这些变化吗?
虽然使用$watch
可以解决问题,但这不是最有效的解决方案。您可能想要更改在服务中存储数据的方式。
问题是您taskList
每次在为范围分配指向旧位置的范围内分配新值时都替换与之关联的html" target="_blank">内存位置。您可以在这种情况下看到这种情况。
首次加载插件时,使用Chrome拍摄堆快照,单击按钮后,您将看到示波器指向的内存位置从未更新,而列表指向了另一个内存位置。
您可以通过让服务中包含一个包含可能更改的变量的对象(如data:{task:[], x:[], z:[]}
)来轻松解决此问题。在这种情况下,永远不要更改“数据”,但可以随时更改其任何成员。然后,您可以将此数据变量传递给范围,并且只要不通过尝试将“数据”分配给其他变量来覆盖它,只要数据中的字段发生变化,范围就将知道并正确更新。
该示例显示了使用上面建议的修复程序运行的相同示例。在这种情况下,无需使用任何观察程序,并且一旦发生未在视图上进行某些更新的情况,您知道您需要做的就是运行一个作用域$apply
来更新视图。
这样,您便无需观察者经常比较变量的更改和在需要监视许多变量的情况下涉及的丑陋设置。这种方法的唯一问题是,您在视图(html)上将拥有“数据”。在所有以前只有变量名的地方加上前缀。
这个问题可能已经得到了回答,我读过很多类似的,但对我不起作用。因此,我的具有扩展的自定义表模型。我的数据是和列名。那么,当我的数据发生更改时,如何更新表呢?我一直在使用,它正在工作,但它将我的自定义单元格呈现器重置为默认值。谢了。
问题内容: 我尝试编写一个小指令,以将其内容包装在另一个模板文件中。 这段代码: 应该有以下输出: 因为布局“默认”具有以下代码: 这里的指令代码: }); 我的问题: 例如,当我在模板(在布局模板中或在布局标签内部)中使用范围变量时。它只是最初工作。如果我更新变量,则该指令不再更新。整个链接功能只会被触发一次。 我认为,AngularJS不知道,该指令使用范围变量,因此不会被更新。但是我不知道如
UserViewModel: 用户存储库:
问题内容: 经过数小时令人沮丧的搜索,我觉得我需要在这里提交我的问题。如果此问题以前得到过解答,我事先表示歉意,但是到目前为止,我的搜索都没有帮助。所以这是我的问题: 我的JavaScript代码正在创建一个对象,该对象由AngularJS修改和监视。对于某些事件(例如加载对象的先前设置),我希望从范围之外更改该对象的属性。问题是输入不会改变… 这是我希望如何执行这些更改的示例: HTML代码:
我有一个抽象类,它扩展类以提供基本的orm函数。它提供的所有函数都受到类的保护,因此它可以决定哪些字段对外部对象公开可用。但是最近,我开始使用一些不需要如此复杂的较小的数据类,并且将受益于orm编辑功能的公开可用和没有特殊功能。 由于函数的命名约定是充分和紧凑的,有没有办法将现有函数更改为公共函数(不需要相同的类或临时扩展),或者我必须使用php的新特性来添加一个现有的类,其中包含函数的公共版本,
问题内容: 我有一个WCF服务,当数据库发生更改时(SQL Server 2005),它需要通知其客户端。只要我找到一种将任何更改通知我的 服务 的方法,这相对容易实现。我可能可以在表上创建数据库触发器,并让该触发器启动一个通知我的服务的小型服务客户端,但是我想知道是否有更好的方法可以做到这一点?让服务轮询数据库中的更改将是一个可行的解决方案,但是我不确定采用哪种最佳方法(并且最好向我的服务发送通