javascript - 更改 ng-model 后 Select2 View 不会更改

标签 javascript angularjs angularjs-directive jquery-select2 angularjs-select2

我正在努力创建一个带有 select2 处理的元素。我为 select2 下拉列表创建了一个 Angular Directive(指令)。但是,如果我在渲染指令后更改 ng-model, View 将​​不会更新。

以下是 Jsfiddle 中简单示例的链接:http://jsfiddle.net/odiseo/zrchy7w0/5/

<div ng-app="miniapp" ng-controller="Ctrl">
<select ng-model="selectedOption" wb-select2 ng-options="k as v for (k, v) in optionList" select-width="300px"></select>
<button ng-click="changeModelOutside()">Click me</button>

var $scope;
var app = angular.module('miniapp', []);
app.directive('wbSelect2', function () {
return {
    restrict: 'A',
    scope: {
            'selectWidth': '@',
            'ngModel': '='
    },
    link: function (scope, element, attrs) {
        //Setting default values for attribute params
        scope.selectWidth = scope.selectWidth || 200;
        element.select2({
            width: scope.selectWidth,
        });
    }
};
});



function Ctrl($scope) {
$scope.optionList = {
    'key1': 'Option 1',
        'key2': 'Option 2',
        'key3': 'Option 3',
        'key4': 'Option 4'
};

$scope.selectedOption = 'key3';
$scope.changeModelOutside = function () {
    $scope.selectedOption = 'key4';

};
}

顺便说一句,修复应该在指令的链接函数内部进行更改,任何修复外部指令(我已经尝试过使用 $('option').select2().select2('val','1')) 只是一种解决方法。

有人发现同样的问题并有解决方案吗?

最佳答案

你可以看看这个jsfiddle。

http://jsfiddle.net/zrchy7w0/6/

<div ng-app="miniapp" ng-controller="Ctrl">
    <select ng-model="selectedOption" wb-select2 ng-options="k as v for (k, v) in optionList" select-width="350px" style="width:300px"></select>
    <button ng-click="changeModelOutside()">Click me</button>
</div>
<小时/>
var $scope;
var app = angular.module('miniapp', []);

app.directive('wbSelect2', function () {
    return {
        restrict: 'A',
        scope: {
            'selectWidth': '@',
            'ngModel': '='
        },
        link: function (scope, element, attrs) {
            //Setting default values for attribute params
            scope.selectWidth = scope.selectWidth || 200;
            element.select2({
                width: scope.selectWidth,
            });

            scope.$watch('ngModel', function(newValue, oldValue){
                element.select2().val(newValue);
            });
        }
    };
});



function Ctrl($scope) {
    $scope.optionList = {
        'key1': 'Option 1',
            'key2': 'Option 2',
            'key3': 'Option 3',
            'key4': 'Option 4'
    };

    $scope.selectedOption = 'key3';
    $scope.changeModelOutside = function () {
        $scope.selectedOption = 'key4';
    };
}

关于javascript - 更改 ng-model 后 Select2 View 不会更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30222487/

相关文章:

angularjs - 如何从另一个域 Angular typescript 调用api?

javascript - 当用户开始在 AngularJS 中输入(输入字段长度> 0)时如何检查 ng-pattern?

javascript - 如何将过滤后的参数发送到指令

javascript - 如何有条件地放置 AngularJS 指令?

javascript - 如何在angularJS中将自动完成下拉列表作为网格?

javascript - 带有数据的 Angular 提交表

javascript - 在选中复选框之前隐藏 div

angularjs - 如何停止 Angular 处理 d3 中的点击事件

javascript - Opentok 在 session 之间切换

javascript - 我不知道为什么这个 Canvas 是空的