4

因此,语义 UI 出现在我印象深刻的最新“热门” UI 框架中;但是,它们的下拉菜单不是 HTML 的“选择”和“选项”标签的实现,而是自定义的。对于我的项目,我正在使用 AngularJS,它是一个了不起的 JavaScript MVW 框架。

如何将AngularJS select ng-optionSemantic UI 的下拉菜单集成?我不是 JS 专业人士。这是 JSfidde:http: //jsfiddle.net/fMUy3/

    <!doctype html>
<html ng-app="App">

    <body ng-controller="MainCtrl">
            <h3>Option 1 (standard)</h3>

        <select ng-model="selectedItem" ng-options="c as (c.id + ' - ' + c.name) for c in containers">
            <option value="">-- Pick A Container --</option>
        </select>
        <br>ID: {{selectedItem.id}}
        <br>Name: {{selectedItem.name}}
         <h3><a href="http://semantic-ui.com/modules/dropdown.html"> Semantic UI Dropdown</a></h3>

        <div class="ui selection dropdown ">
            <input name="id" type="hidden" value="0">
            <div class="text">-- Pick A Container --</div>  <i class="dropdown icon"></i>   
            <div class="menu transition hidden">
                <div class="item active">-- Pick A Container --</div>
                <div data-value="{{container.id}}" class="item" ng-repeat="container in containers">{{container.name}}</div>
            </div>
    </body>

</html>

JavaScript:

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

app.controller('MainCtrl', function($scope) {
  $scope.containers = [
  {id: 1, name: 'Box1'},
  {id: 2, name: 'Box2'},
  {id: 3, name: 'Box3'}];

  //$scope.selectedItem = $scope.containers[0];
});

$('.ui.dropdown').dropdown();

非常感激!

4

2 回答 2

7

你的小提琴有一些问题。首先是语义 UI JavaScript 在 jQuery 之前被加载。它依赖于 jQuery,所以必须先加载 jQuery。(另外,建议在 AngularJS 之前加载 jQuery。)

第二件事是在 AngularJS 有机会展开创建选项的转发器之前调用了语义下拉函数。这意味着当语义进行下拉操作时,选项不存在。 作为一个简单的解决方案,我设置了一个超时,它将在下一个处理循环中触发;在 AngularJS 完成它的事情之后。您可以看到语义下拉列表现在有效

这更像是一个简单的概念证明,用于演示事物的时序,不应使用。
http://jsfiddle.net/fMUy3/1/

$timeout(function(){
    $('.ui.dropdown').dropdown();
},0)

应该如何处理这个问题是使用一个指令来处理时间,这样您就不需要使用超时,也不需要在控制器中指定每个下拉列表。这是使用指令的示例(可以处理所有情况)

http://jsfiddle.net/fMUy3/7/

app.directive('dropdown', function ($timeout) {
    return {
        restrict: "C",
        link: function (scope, elm, attr) {
            $timeout(function () {
                $(elm).dropdown().dropdown('setting', {
                    onChange: function (value) {
                        scope.$parent[attr.ngModel] = value;
                        scope.$parent.$apply();
                    }
                });
            }, 0);
        }
    };
});
于 2013-12-13T19:37:17.983 回答
1

您的第一个问题是您需要在jquery之后包含语义.js。

其次,您不能ng-options在 div 中继器上使用,但您可以使用ng-click

HTML

 <div data-value="{{container.id}}" class="item" ng-repeat="container in containers" ng-click="select(container)">
     {{container.name}}
 </div>

JS

$scope.select = function(container) {
    $scope.selectedItem = container;        
};

看到这个更新的小提琴

于 2013-12-13T19:53:15.350 回答