Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在处理`Controller As`语法时,如何访问隔离作用域API字段?_Javascript_Angularjs - Fatal编程技术网

Javascript 在处理`Controller As`语法时,如何访问隔离作用域API字段?

Javascript 在处理`Controller As`语法时,如何访问隔离作用域API字段?,javascript,angularjs,Javascript,Angularjs,我有一个代码,可以从谷歌地图中选择一个地方 当您选择一个位置时,它会显示您选择的位置及其纬度/经度: 你可以看到 但是该代码没有使用控制器作为语法 所以我改变了它: 控制器更改: Html更改: 指令变更: 这是新的 但是现在当我选择一个地方时,它不会更新值 问题 如何修复代码,使其仍能通过以下方式进行交互: scope: { details: '=', ngAutocomplete: '=', options: '=',

我有一个代码,可以从谷歌地图中选择一个地方

当您选择一个位置时,它会显示您选择的位置及其纬度/经度:

你可以看到

但是该代码没有使用
控制器作为
语法

所以我改变了它:

  • 控制器更改:

  • Html更改:

  • 指令变更:

这是新的

但是现在当我选择一个地方时,它不会更新值

问题

如何修复代码,使其仍能通过以下方式进行交互:

scope: {
        details: '=',
        ngAutocomplete: '=',
        options: '=',
        lt:'=',
        ln:'=',
      }
(当我作为移动到
控制器时)

我的意思是-我不应该在以下情况下使用
控制器
(而不是
范围
):

我错过了什么

如果他们说现在(“controller as”语法)控制器就是我们的viewModel,那么我看不出使用controller参数和access有任何错误:

controller.lt = ...;
controller.ln = ...;

我显然错了…

您似乎混淆了一些概念,因为您试图在指令内部和外部使用相同的控制器

即使在指令外使用
控制器作为
,指令内的实现也应该保持不变。整个要点是,指令不应该关心它之外发生了什么。
scope:{}
选项允许您根据提供的属性值告诉指令将哪些值放在它自己的范围内

因此,答案是保持原始示例中的指令代码不变,一切都会正常工作

工作plnkr:


旁注:您应该避免在组件前面加上
ng
ng
前缀用于内置在Angular中的组件,您应该使用自己的前缀。

我最后使用了$scope。$watch()

小提琴示例:


GitHub要点:

您缺少了
scope
链接,但使用
controller
@Grundy我不明白您的意思。您可以详细说明一下吗?您将指令传递到:
scope.lt,scope.ln
,它指的是
controller.lat,controler.long
,但内部直接设置
controller.lt
controller.lg
所以传递给link函数的
controller.lat
stil未定义也是
controller
与view@Grundy那么您将如何引用指令中的
controller.lat
?我的想法是NG不再关心范围,现在,viewmodel是
新控制器()。因此我认为指令应该可以访问
新控制器()
…否?@RoyiNamir否,指令不应该直接访问它外部的控制器。该指令有自己的范围。这就是为什么该选项被称为
scope
。因此对于指令,有一个
scope
(独立的一个),但是对于控制器,没有作用域,只有
新控制器()
,因为
控制器为
?@RoyiNamir是的,我想说这非常正确。他们本可以构建得更好。迷路的方式太多了。这不是框架应该如何编写的。(顺便说一句,谢谢)
controller.lt = ...;
controller.ln = ...;
$scope.$watch(function() {
  return vm.location_result;
}, function(location) {
    if (location) {
       // do something
    }
});