2016-08-17 97 views
1

我需要在模型值更改的所有SELECT元素上觸發'更改'javascript事件。模型的值通過範圍以編程方式更改,因此使用ngChange不在場(僅對用戶創建的值更改作出反應)。模型更改時觸發更改事件

請幫忙嗎?

代碼示例:PLNKR

var app = angular.module('plunker', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.name = 'oldname'; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="plunker"> 
 
<div ng-controller="MainCtrl"> 
 
    <p>Hello {{name}}!</p> 
 
    <select ng-model="name" class="myInput" onChange="alert('changed');" > 
 
     <option value="oldname">oldname</option> 
 
     <option value="newname">newname</option> 
 
    </select> 
 
    <button ng-click="name='newname'">Change by Anguar</button> 
 
    </div> 
 
    </div>

選擇選擇選項顯示警報。當我點擊按鈕時,值(模型)確實發生了變化,但沒有顯示警報,因爲模式更改不會觸發「更改」事件。

+0

請分享您的代碼調試容易 –

+0

@NagaSaiA加質疑。 –

+0

請在問題本身中包含所有必要的代碼以回答問題,而不是在第三方網站上。 –

回答

0

onChange是一個javascript事件處理程序,並不依賴於angular的摘要循環。嘗試使用ng-change代替。

+0

正如我所說的,ngChange只對用戶所做的更改作出反應。當模型以編程方式更改時,它不會觸發。更多角度文檔。 –

+0

$ watch()怎麼樣? –

+0

@AnirudhMangalvedhekar你會提供一個例子嗎?我需要這個代碼是一般的 - 例如 - 不要使用任何特定的模型。而是爲了處理所有這些問題。 –

1

可以使用$範圍。$腕錶觀看模型,並觸發change事件的變化

$scope.$watch('name', function(){ 
    //slct is the id for the select 
    $('#slct').trigger('change'); 
    }) 

看到plnkr

+0

或查看https://plnkr.co/edit/Aq1mQm1vyv3bSIWVdKHs?p=preview –

+0

是的,謝謝,這在大多數情況下都可以使用。但我需要我的代碼是一般的。也就是說,我有許多模型與他們有很多共同的元素,我不能爲所有人編寫單一的觀察聲明。 ($('select')。val(),function(){ $(this).trigger('change'); })如果可以這樣做: '$ rootScope。$ watch ;' –

+0

您可以爲更通用的解決方案創建自定義指令,請參閱https://plnkr.co/edit/VYMBA9gac8TUFsqtB16x?p=preview –