Javascript 手表坏了

Javascript 手表坏了,javascript,angularjs,Javascript,Angularjs,项目发生变化时未调用Watch。它可以加载并正确加载地图。但是,当我用下拉菜单更改事件类型时,它永远不会进入函数内部。我用concole.log进行了检查 实际的事件类型确实发生了变化,它会在屏幕上显示新值,并显示{{event\u type.type} $scope.event_type = { id: 0, type:'All' } $scope.$watch( 'event_type', function(val) { $scope.markers = Events.venues(

项目发生变化时未调用Watch。它可以加载并正确加载地图。但是,当我用下拉菜单更改
事件类型时,它永远不会进入函数内部。我用
concole.log
进行了检查

实际的
事件类型
确实发生了变化,它会在屏幕上显示新值,并显示
{{event\u type.type}

$scope.event_type = { id: 0, type:'All' }
$scope.$watch( 'event_type', function(val) {
    $scope.markers = Events.venues(val.type)
    }, true)

我想这叫深度潜水或深度观察。无论如何,这是$watch上要设置为true的第三个参数

您还可以将新值作为参数传递,而不是从事件类型读取。如下图所示

$scope.$watch( 'event_type', function(newVal) {
    $scope.markers = Events.venues(newVal.type)
}, true);
这里有一个小插曲:


如果这里有什么不合理的地方,请告诉我。

我想你不想在它周围加上单引号。您可能还希望将手表放在event_type.type而不是event_type上。它必须是表达式的单引号,adding.type使其在allI上无法工作,我在测试时看到了这一点。我发布的答案应该对你有帮助。这是有道理的,应该有效,但仍然没有什么,我正在用新的代码更新这个问题。它被称为深度观察。这可能会有帮助:仍然没有,从未第二次进入功能您是否将true传递给手表?这是这里最重要的部分$作用域.$watch('event_type',function(){..},true);没关系,我从你的新代码中看到你做到了。看起来$watch实际上工作正常,可能是绑定问题或其他问题。你能制作一个plnkr来展示更多你想要完成的事情吗?这相当复杂,它使用一个下拉列表来获取ng模型的值,并将其传递给谷歌地图标记。