Angular : select / ng-option 未触发:如何调试?
Angular : select / ng-option not fired: how to debug?
我在使用一段 angular 代码时遇到了问题:我有一个 "ng-select" 在某些环境中有效但在其他环境中无效!
这段代码的型号是:
var imputationApp = angular.module('imputationApp', []).controller('imputationController', function($scope) {
$scope.currentSL = '';
$scope.sousLignes = [
{ "slidx":"c5!1875354624","desc":"option1 " },
{"slidx":"c9!1875379297","desc":"option 2" },
{ "slidx":"c9!1875379392","desc":"option 3" }
];
});
和 HTML:
<div ng-app="imputationApp" ng-controller="imputationController">
<fieldset> <legend>Imputation :</legend>
<select class="liste-candidats-select" ng-model="currentSL" ng-options="item as item.desc for item in sousLignes" ></select>
<br />
<span> aE: {{currentSL.desc}} / {{currentSL.slidx}} </span>
</fieldset>
</div>
可以在 fiddle 上进行测试:
http://jsfiddle.net/zDvD9/78/
一个人,没问题。
但是当集成到更复杂的页面中时,有时它 运行,有时不...所以我不可能提供更多关于它的细节。
有人可以告诉我如何调试它吗?我从来没有用 angular 做过,我不知道是否有办法捕捉 select 的变化事件...
感谢您提供任何可能的解决方案。
迪迪埃
有一个名为 ng-change 的指令。您可以使用它并在调用的函数中设置断点。
我不是 100% 确定,但我认为我的担忧与 Angular 没有直接关系,而是 Angular "code" 的整合问题另一个使用 jQuery, ...
的应用程序
"ng-select" 组件是我在此页面中遇到的唯一 "Angular" 问题。
经过 3 天的头痛之后,我找到了(希望!)解决方法,需要一些工作:
在我的控制器中,我添加了一个全局变量:
var AngularMainScope = null;
var imputationApp = angular.module('imputationApp', []).controller('imputationController', function($scope) {
...
AngularMainScope = $scope;
$scope.onSelectChangeSousLigne = function(sel){
alert(' onSelectChangeSousLigne fired !!! ' + sel.value);
var wsl = $scope.data.idx_sousLignes[sel.value];
$scope.data.currentSL = wsl;
// do some stuffs..
...
// Tell to Angular...
if (!$scope.$$phase) {
$scope.$apply(); // MAGIC !
}
return;
}
并且在 HTML 代码中...
<select ng-model="data.cur_slidx" onchange="AngularMainScope.onSelectChangeSousLigne(this)" >
<option ng-repeat="item in data.sousLignes" value="{{item.slidx}}">{{item.desc}}</option>
</select>
我仍然需要检查是否可以正确检索当前值。我已经很高兴为值的每次更改都有一个事件!
我在使用一段 angular 代码时遇到了问题:我有一个 "ng-select" 在某些环境中有效但在其他环境中无效!
这段代码的型号是:
var imputationApp = angular.module('imputationApp', []).controller('imputationController', function($scope) {
$scope.currentSL = '';
$scope.sousLignes = [
{ "slidx":"c5!1875354624","desc":"option1 " },
{"slidx":"c9!1875379297","desc":"option 2" },
{ "slidx":"c9!1875379392","desc":"option 3" }
];
});
和 HTML:
<div ng-app="imputationApp" ng-controller="imputationController">
<fieldset> <legend>Imputation :</legend>
<select class="liste-candidats-select" ng-model="currentSL" ng-options="item as item.desc for item in sousLignes" ></select>
<br />
<span> aE: {{currentSL.desc}} / {{currentSL.slidx}} </span>
</fieldset>
</div>
可以在 fiddle 上进行测试: http://jsfiddle.net/zDvD9/78/
一个人,没问题。
但是当集成到更复杂的页面中时,有时它 运行,有时不...所以我不可能提供更多关于它的细节。
有人可以告诉我如何调试它吗?我从来没有用 angular 做过,我不知道是否有办法捕捉 select 的变化事件...
感谢您提供任何可能的解决方案。 迪迪埃
有一个名为 ng-change 的指令。您可以使用它并在调用的函数中设置断点。
我不是 100% 确定,但我认为我的担忧与 Angular 没有直接关系,而是 Angular "code" 的整合问题另一个使用 jQuery, ...
的应用程序"ng-select" 组件是我在此页面中遇到的唯一 "Angular" 问题。
经过 3 天的头痛之后,我找到了(希望!)解决方法,需要一些工作:
在我的控制器中,我添加了一个全局变量:
var AngularMainScope = null;
var imputationApp = angular.module('imputationApp', []).controller('imputationController', function($scope) {
...
AngularMainScope = $scope;
$scope.onSelectChangeSousLigne = function(sel){
alert(' onSelectChangeSousLigne fired !!! ' + sel.value);
var wsl = $scope.data.idx_sousLignes[sel.value];
$scope.data.currentSL = wsl;
// do some stuffs..
...
// Tell to Angular...
if (!$scope.$$phase) {
$scope.$apply(); // MAGIC !
}
return;
}
并且在 HTML 代码中...
<select ng-model="data.cur_slidx" onchange="AngularMainScope.onSelectChangeSousLigne(this)" >
<option ng-repeat="item in data.sousLignes" value="{{item.slidx}}">{{item.desc}}</option>
</select>
我仍然需要检查是否可以正确检索当前值。我已经很高兴为值的每次更改都有一个事件!