首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选角器的选择性

选角器的选择性
EN

Stack Overflow用户
提问于 2016-08-15 16:30:07
回答 1查看 310关注 0票数 1

我尝试使用选择元素的选择性,它通过angularjs控制器呈现他的选项。问题是,在角度将选项传递给模板之前,选择性是适用的。对于协议来说,选择性样式可以很好地处理静态选项,但它们不是数据绑定的,静态选项根本不是解决方案。

html

代码语言:javascript
复制
<select id="roleIds" name="roleIds[]" ng-options="role.name for role in roles track by role.id" ng-model="selected_roles" multiple></select>

安古拉杰

代码语言:javascript
复制
$http
({
    method: "GET",
    url: url,
    isArray: true
}).then
(
    function(response)
    {
        $scope.name = response.data.name;
        $scope.email = response.data.email;
        $scope.roles = response.data.roles;
        $scope.selected_roles = response.data.selected_roles;
        $scope.selected_accesses = response.data.selected_accesses;
        $scope.accesses = response.data.accesses;

        jQuery('#roleIds').selectivity({
          multiple: true,
          tokenSeparators: [' ']
         });
    }
);

我怎样才能做到这一点?在使用angularjs处理数据时,是否有可能进行良好的多选择?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-15 17:46:10

您可以创建一个角指令,并在指令的链接函数中应用选择性。然后,可以将该指令添加到选定元素的html模板中。由于角色可以在以后更新和检索,所以我在roles对象中添加了一个watch。

代码语言:javascript
复制
angular.module("app", []);
angular.module("app").controller("SelectivityCtrl", function($scope, $timeout) {

  var roles = [{
    id: 1,
    name: "test"
  }, {
    id: 2,
    name: "blah"
  }, {
    id: 3,
    name: "third"
  }];
  $timeout(function() {
    $scope.roles = roles;
    $scope.selected_roles = [];
  }, 1000);
});
angular.module("app").directive("jSelectivity", function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    scope: {
      jSelectivity: "<"
    },
    link: function(scope, elem, attr, modelCtrl) {
      scope.$watch("jSelectivity", function(newValue, oldValue) {
        if (newValue !== oldValue) {
          var test = jQuery(elem).selectivity({
            multiple: true,
            tokenSeparators: [' ']
          });
          $(test).on('change', function(e) {
            modelCtrl.$setViewValue($('#roleIds').selectivity('data'));
            modelCtrl.$render();
          });
        }

      });
    }
  }
});
代码语言:javascript
复制
<link href="https://arendjr.github.io/selectivity/stylesheets/selectivity-jquery.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://arendjr.github.io/selectivity/javascripts/selectivity-jquery.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>

<body ng-app="app">
  <div ng-controller="SelectivityCtrl">
    <select id="roleIds" name="roleIds[]" ng-options="role.name for role in roles track by role.id" ng-model="selected_roles" multiple j-selectivity="roles"></select>
    <p>{{selected_roles|json}}</p>
  </div>

</body>

更新

我在新的选择性div上添加了一个onChange事件处理程序,这将允许我们正确地更新模型数据。我建议编写一个自定义的角指令,它围绕着选择性的功能。这将允许更多用户友好的设计和代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38959054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档