2015-11-18 8 views
0

Я проверил все другие сообщения и поверьте мне, это не дубликат. Надеюсь, кто-нибудь может мне помочь. Вот код.

HTML-код. Когда пользователь нажимает кнопку «Отчет», выполняется сборка buildData. Название параметра multiselect - mu-ls.

<button ng-click="buildData(selected_items)">Report</button> 
<div>Universe:</div> 
<div><mu-ls pre-selected="member.roles" model="selected_items" options="roles"></muls></div> 

Директива Code- Название директивы - muLs. Пользователь может выбрать несколько опций, используя эту директиву. $ Scope.model дает массив идентификаторов, выбранных пользователем.

angular.module('Select').directive('muLs', function() { 
    return { 
    restrict: 'E', 
    scope: { 
     model: '=', 
     options: '=', 
     pre_selected: '=preSelected' 
    }, 
    template: "<div data-ng-class='{open: open}'>" + 
         "<button data-ng-click='open=!open;openDropdown()'>Select...</button>" + 
          "<ul aria-labelledby='dropdownMenu'>" + 
           "<li data-ng-repeat='option in options'> <a data-ng-click='setSelectedItem()'>{{option.name}}<span data-ng-class='isChecked(option.id)'></span></a></li>" + 
          "</ul>" + 
        "</div>", 

    controller: function ($scope) { 

     $scope.openDropdown = function() { 
      $scope.selected_items = []; 
      for (var i = 0; i < $scope.pre_selected.length; i++) { 
       $scope.selected_items.push($scope.pre_selected[i].id); 
      } 
     }; 

     $scope.setSelectedItem = function() { 
      var id = this.option.id; 
      if (_.contains($scope.model, id)) { 
       $scope.model = _.without($scope.model, id); 
      } else { 
       $scope.model.push(id); 
      } 
      console.log($scope.model); 
      return false; 
     }; 

     $scope.isChecked = function (id) { 
      if (_.contains($scope.model, id)) { 
       return 'glyphicon glyphicon-ok pull-right'; 
      } 
      return false; 
     }; 

    } 
} 
}); 

Код контроллера. В этом случае должен отображаться список выбранных элементов, перечисленных выше на стороне контроллера. На данный момент это показывается неопределенным.

'use strict' 
var Modd= angular.module('Select', []); 
Modd.controller('SelectController', function ($scope, $timeout, $rootScope) { 

    $scope.roles = [ 
    { "id": 1, "name": "USA" }, 
    { "id": 2, "name": "France" }, 
    { "id": 3, "name": "Russia" } 
    ]; 

    $scope.member = { roles: [] }; 
    $scope.selected_items = []; 

    $scope.buildData = function (selected_items) { 
    console.log("This is", $scope.model); 
    } 
}); 

QUESTION- Как я могу использовать это директивное значение $ scope.model на стороне контроллера ??? Пожалуйста, предложите ребятам !!!

Сначала я попробовал $ scope.selected_items. Он отображает список выбранных элементов только один раз. Как только я нажму кнопку «Сообщить», он предоставит список. Если я снова начну нажимать и отменять выбор элементов списка, он все равно будет показывать предыдущие значения. а не текущие.

$ scope.model продолжает показывать последние выбранные значения.

ответ

1

Вы передаете selected_items к вашей директиве так будет содержать значение model в контроллере.

$scope.buildData = function() { 
    console.log("This is", $scope.selected_items); 
} 
+0

@ DenimChicken- обновил мой вопрос, основываясь на том, что вы упомянули. – Ayesha

+1

@Ayesha это решение работает отлично для меня. Вот скрипка, чтобы показать вам: https://jsfiddle.net/9f9kud3n/ – DenimChicken

+0

@ DenimChicken - это сводит меня с ума. Я не знаю, почему я не получаю аналогичную продукцию. это имеет значение, когда у меня есть директива, контроллер и храм отдельно. tats wat, о котором я могу думать прямо сейчас. сделал u изменить код отдельно от упоминания $ scope.selected_items> ?? – Ayesha

1

model двусторонний. Поэтому, если вы назначаете переменную $scope от вашего контроллера к атрибуту модуля, она будет обновляться при изменении выбранного значения.

Поэтому вы можете console.log($scope.selected_items);

+0

@ SeanLarkin- обновленный мой вопрос на основе того, что вы упомянули. – Ayesha

Смежные вопросы