【发布时间】:2013-06-23 19:20:29
【问题描述】:
我有一个在指令中的表格。它包含 2 个选择下拉菜单(jQuery 样式)和一个 jQuery UI 滑块,所以它们都是一致的主题。
Dropdown 1 在生成时填充,就像它们一样简单。
当 Dropdown 1 的值更改时,Dropdown 2 会被填充。发生这种情况是因为下拉菜单 1 附加了 ng-change="refreshModels()"。这就像一个魅力。
但是,滑块的问题更大。
为了获得滑块的值,我需要一个隐藏的输入字段,在滑块位置的每次更改时都会填充 $.val() 。值会正确更新,甚至会触发 change 事件(当我将 onchange="console.log('I changed')" 放到隐藏字段中时,所有内容都会被很好地记录下来)。
但是,附加到同一个隐藏字段的 ng-model 永远不会更新。与 onchange 不同,Ng-change 永远不会触发。
所以我asked around 并尝试在 jQuery 滑块的幻灯片处理程序中执行此操作:
angular.element($(this)).scope().$apply();
但没有骰子。什么都没发生。尝试调用我知道该指令中存在的模型,如下所示:
angular.element($(this)).scope().model_that_definitely_exists;
产生未定义的结果。尝试访问指令的父控制器中的模型也会产生 undefined。
为什么除了直接用户在字段上输入之外的方式进行 Angular 注册更改如此困难?我做错了什么?
附:我尝试将 ng-mouseup 放在成为滑块的元素上,这很好地调用了刷新方法 - 但忽略了隐藏字段。对 Angular 来说,这些仍然是未定义的,尽管实际上它们是有值的——滑块将它们放在那里。
P.P.S.我还尝试将 $watch 放在我希望在移动滑块后更改的模型上,什么都没有。模型的值永远不会改变,即使字段的 val 确实发生了变化。
P.P.P.S.我刚刚发现了这种可悲的状况。 https://github.com/angular-ui/angular-ui/issues/252如果有人有解决方法,我将不胜感激。
【问题讨论】:
-
不知道这个 JSBin 是否有帮助:jsbin.com/azasus/1/edit
标签: javascript jquery forms jquery-ui angularjs