如何在angularJS中$watch一个字段
How to $watch a field in a factory angularJS
我在我的web应用程序中使用factory
。在factory
中有一个对象mapLayers
。在我的controller
中,我将此factory.mapLayers
对象分配给范围$scope.mapLayers
上的变量,并且我在它上使用ngRepeat
。
问题是factory.mapLayers
中发生的变化不会影响$scope.mapLayers
,因此DOM
不会显示新的变化。如何将$watch
或$factory.mapLayers
绑定到factory.mapLayers
?
mapService.js:
...
factory.mapLayers = [];
...
return factory;
mainController.js:
...
$scope.mapLayers = MapService.mapLayers;
...
main.html:
...
<div ng-repeat="layer in mapLayers">
...
</div>
必须在变量上注册一个监视器。把它放到控制器中:
$scope.$watchCollection(
function () {
return MapService.mapLayers;
}, function (newVal, oldVal, scope) {
// the `scope` parameter refers to the current scope
scope.mapLayers = MapService.mapLayers
}
)
$watchCollection()
的第一个参数是一个函数,它返回一个要监视的值(也可以是一个字符串,作为Angular表达式求值),第二个参数是一个回调函数,当检测到变化时调用。
值得一提的是,$watch()
可能不起作用(取决于你如何改变你的数组),因为它只会检查数组引用是否被改变——后者发生,例如,如果你将MapService.mapLayers
分配给一个新的array对象。
$watchCollection
也将监视数组内容的变化,即它将检测诸如添加或删除项之类的变化。要了解更详细的解释,您可能还想看看Ben Nadel关于两者之间差异的精彩博客文章。
您应该在控制器中$watch
服务变量。
mainController.js:
$scope.$watch(function() { return MapService.mapLayers },function() {
$scope.mapLayers = MapService.mapLayers
})
相关文章:
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- Angular ng repeat order将多个字段作为一个字段
- 我怎么能让流星简单模式中的一个字段等于一个js变量,并且仍然让用户填写简单模式的其余部分
- 如何限制一个字段只接受4个数字字符作为输入,并获得'It’这是潜水警报
- 可以't无法将一个字段复制到另一个字段
- 如何隐藏&使用jQuery禁用依赖于另一个字段值的字段
- 我有一个字段计算,如果结果低于 60,则需要显示最小值
- 根据Rails4中的一个字段自动填充表单
- 在 Jquery ajax 中,在一个字段中输入时获取详细信息
- 在输入字段中选择一个值,然后用相应的数据填充另一个字段
- 如何获取id并在ror中基于该id显示下一个字段
- 使用Join,要求两个字段中的一个字段为非空
- jQuery自定义验证只显示最后一个字段的错误
- 我如何使用jQuery来点击和选择并让它填充一个字段
- 如何让Typeahead.js使用对象的一个字段而不是全部字段自动完成或选择
- 在document-mongoDB中设置一个字段
- 如何计算mongodb中两个集合中一个字段的不同值的数量
- AngularJS:在控制器中过滤除一个字段外的所有字段
- 更新其中一个字段时刷新其他输入字段.使用Angularjs(附Plunker)