【问题标题】:angularjs watch jquery directive valueangularjs 监视 jquery 指令值
【发布时间】:2015-09-04 11:52:10
【问题描述】:

$scope.$watch 有点麻烦。情况是我正在使用这个不错的插件来创建一个下拉列表: http://wenzhixin.net.cn/p/multiple-select/docs/

在我的视图文件中,我有:

<select id="hid" multiple="multiple" name="hname">
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
</select>

在我的 js 控制器文件中:

$('#hid').change(function() { $scope.hvalue = $(this).val() }).multipleSelect({ width: '20%', selectAll:false })

$scope.testwatch = []
$scope.$watch(function() {
    return $scope.hvalue
  }, function(value) {
      if(value) {
        $scope.testwatch = $scope.hvalue
      }
     }, true)

问题是当用户改变下拉菜单时,$scope.hvalue 被修改了。但是,$watch 函数永远不会执行。知道为什么会这样吗?

非常感谢!

【问题讨论】:

    标签: jquery angularjs drop-down-menu watch


    【解决方案1】:

    如果我冒险,我想我会说,您的 jquery 更改函数不在角度摘要循环中。

    要实现您的功能,我建议在您的选择标签上使用 ng-model 并像这样监视该 ng-model:

    HTML:

    <select id="hid" multiple="multiple" name="hname" ng-model="obj.hvalue">
        <option value="1">Option 1</option>
        <option value="2">Option 2</option>
        <option value="3">Option 3</option>
    </select>
    

    控制器:

    $scope.obj = {};
    $scope.obj.hvalue = '';
    $scope.$watch('obj.hvalue', function(newval, oldval) {
        console.log(newval);
    })
    

    【讨论】:

    • 谢谢@Tarun!能否给一点提示如何实现 ng-model 功能?
    • 我已经在答案中展示了?这就是你所要做的。如果你卡住了,也可以创建一个 plunker
    • 其实我试过ng-model,但它的obj.hvalue没有改变。不确定多选插件是否支持此功能...
    • 实际上大多数人会建议不要将 jquery 与 angularjs 一起使用。对于多选插件,您可以使用 Angular 的多选之一。至于 ng-model 的问题,你可以创建一个 plunker 以便我可以帮助你吗?
    • 我稍微换了一下表。立即尝试。
    猜你喜欢
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2015-05-31
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 2018-02-11
    相关资源
    最近更新 更多