【问题标题】:angular watch for angular-leaflet-directiveangular-leaflet-directive 的 angular watch
【发布时间】:2015-04-21 22:47:42
【问题描述】:

我正在尝试将$watch 置于角度值上,以根据控制器的指令以不同方式设置控件,并且我尝试使用leafletScope.$watch("variable") 跟随angular-leaflet-directive 中的领先地位。

我添加了一个新的$watch,因为它是一个对象:

leafletScope.$watch("controls", function(controlOpts) {...}, true)

然后我在控制器中使用:

angular.extend($scope, {
    controls: {}
}

这是为了初始化控件,因为这似乎是必需的。

然后我稍后在事件中调用它:

$scope.controls = { new object }

如果我在控件中记录更改,然后在 $watch 事件中记录,我会得到以下序列:

  • 控制$watch事件记录
  • $scope.control 记录更改事件
  • 没有更多日志

$scope 更改后未调用手表这一事实表明我做错了。

谁能告诉我在哪里,或者如果我在我的简单测试中得出了错误的结论。

如果我做同样的事情并改变我的“中心”模型,我会得到:

  • center$watch 事件记录
  • $scope.center 记录更改事件
  • center$watch 使用新值记录的事件

【问题讨论】:

    标签: angularjs leaflet angular-leaflet-directive


    【解决方案1】:

    结果证明这是 angular-leaflet-directive 和我使用的 html 缩小器 html-minifier 之间的冲突。传单控件的角度传单指令符号是 controls 所以在我的 html 文件中我有

    <leaflet center="centre" controls="controls" layers="layers" width="1200px" height="800px"></leaflet>
    

    html-minifier 将 controls="controls" 设为布尔属性,并使用 collapse boolean attributes 标志将其缩减为

    <leaflet center="centre" controls layers="layers" width="1200px" height="800px"></leaflet>
    

    这不好。我会要求在 angular-leaflet-directive 中更好地记录这一点,或者他们将控件的名称更改为传单控件或避免这种情况在未来发生在像我这样毫无戒心的人身上。

    顺便说一句,事实证明手表上的 true 标志太耗费资源,我将其移除,但它仍然有效..

    【讨论】: