2015-09-04 72 views
0

我遇到$ scope有点麻烦$ watch。这种情况是我用这个漂亮的插件来创建一个下拉: http://wenzhixin.net.cn/p/multiple-select/docs/angularjs观看jquery指令值

在我看来文件

,我有:

<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函数从未执行。任何想法为什么发生这种情况

非常感谢!

回答

0

如果我想冒险,我想我会说,你的jquery更改函数不在角度摘要周期。

要实现你的功能,我会建议使用NG-模式在您选择的标签,并保持一个手表上NG-模式是这样的:

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

谢谢@Tarun!你能否给出一些提示如何实现ng模型功能? – user2528576

+0

我已经在答案中显示了它?那就是你所要做的。如果你卡住 –

+0

实际上我尝试ng-model,但它obj.hvalue不会改变,也创建一个plunker。不知道多选插件是否支持这个功能... – user2528576