Javascript AngularJs观察者为什么会发生这种情况

Javascript AngularJs观察者为什么会发生这种情况,javascript,angularjs,geolocation,Javascript,Angularjs,Geolocation,好吧,我现在正在为此挣扎一段时间 当watcher未启动时,一切正常当watcher启动时,我得到一个lat2。toRad()不是一个函数(花了一段时间才发现..在chrome中,我只得到了undefined不是一个函数..感谢Firebug的精确性) 这让我怀疑这辆车出了什么事 return this*Math.pi/180 我说的话正确吗? 如果有人能指出我在这里缺少的角度或Javascript 谢谢你我想你需要重新考虑一下你的逻辑。您的代码中存在许多问题,甚至连Plunkr都在关注这

好吧,我现在正在为此挣扎一段时间

当watcher未启动时,一切正常当watcher启动时,我得到一个lat2。toRad()不是一个函数(花了一段时间才发现..在chrome中,我只得到了undefined不是一个函数..感谢Firebug的精确性) 这让我怀疑这辆车出了什么事

return this*Math.pi/180 
我说的话正确吗? 如果有人能指出我在这里缺少的角度或Javascript
谢谢你

我想你需要重新考虑一下你的逻辑。您的代码中存在许多问题,甚至连Plunkr都在关注这些问题,例如在showDistance方法中重新定义homePosition:

...
$scope.showDistance = function(pos, homePosition) {
    ...

    // Here we define a new variable with the same name as our function's 2nd param
    var homePosition = {
        ...
这并不是问题的根本原因——我只是想说出来,因为这些警告通常是会让您在Javascript中陷入麻烦的实践的指示。Javascript有一种称为“变量提升”的东西,这基本上意味着无论在函数的哪个位置定义变量,当您输入函数时,它实际上都会在最顶端定义。如果不允许的话,这可能会产生非常不可预测的行为,而用相同名称的var重新定义函数参数是让很多人感到困惑的问题之一

不过,你的根本原因再简单不过了。在本例中,调试器是您的朋友。我已将您的Plnkr分叉,并对其进行了轻微修改,以添加调试器断点:


当你点击这一点时,如果你看你的“本地人”面板,你会发现lat2是一个字符串。字符串对象不支持数学函数-需要先将其转换为int或float.:)

我承认可能是一团糟,但试着在plunker中更改lat输入框,看看我的意思。我不是在重新定义homePosition,我只是从地理位置中提取lat和lon。为什么我使用getDistance函数,因为我用showPosition函数包装了它。我没有看到Plunkr抱怨任何事情,除非我更改了input boxPS-几乎所有角度值都是如此。这是因为DOM中的所有内容都是一个字符串,在获取数据的过程中不进行任何转换。您可以使用{{expressions}}将数字放入DOM中,因为Javascript几乎可以将任何内容转换为字符串。但当它回来时,它将不再是一个数字
...
$scope.showDistance = function(pos, homePosition) {
    ...

    // Here we define a new variable with the same name as our function's 2nd param
    var homePosition = {
        ...