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
}
});