从具有隔离范围的angular指令获取变量

时间:2017-03-20 20:05:55

标签: javascript angularjs

我正在使用angular@1.6.3bootstrap@3.3.7jquery@1.12.4

我试图将<select>标记包装到bootstrap-multiselect jQuery插件中。

为此,我尝试使用具有隔离范围的自定义指令。

这是我的HTML:

<div ng-app="myApp" ng-controller="MainCtrl as vc">
  <select multiple="multiple"
          multiselect
          ng-model="vc.selectedCountries"
          data-options="vc.allCountries"
          data-list-type="Countries">
      <optgroup ng-repeat="(continent, countries) in options" label="{{continent}}">
        <option ng-repeat="country in countries" value="{{country.code}}">
        {{country.code}} - {{country.name}}
        </option>
      </optgroup>
  </multiselect>
</div>

这是我的JS:

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

app.controller('MainCtrl', ['$scope', '$http', function ($scope, $http) {
  var self = this

  self.allCountries = {}

  $http.get('/countries.json')
    .then(function (result) {
      self.allCountries = result.data
    })
}])

app.directive('multiselect', [function () {
  return {
    restrict: 'A',
    scope: {
      options: '=',
      listType: '@',
    },
    transclude: true,
    controller: ['$scope', '$element', '$attrs', '$timeout', function ($scope, $element, $attrs, $timeout) {
      $scope.$watch('options', function(newVal, oldVal) {
        console.log(newVal, oldVal)
        $timeout(function () {
          console.log($scope.options)
          $($element).multiselect('rebuild')
        }, 1)
      })

      $($element).multiselect()
    }]
  }
}])

但是,这种方式永远不会填充<select>。 这不是插件本身的问题,因为如果我删除包含.multiselect()个调用的行,则常规的多重选择显示为空。

我认为这与翻译和范围有关,因为如果我将transclude: true,更改为transclude: false,

<optgroup ng-repeat="(continent, countries) in options" label="{{continent}}">

<optgroup ng-repeat="(continent, countries) in vc.allCountries" label="{{continent}}">

它运作得很好。

但是,我试图推广这个组件,所以我不想依赖控制器。

1 个答案:

答案 0 :(得分:0)

您无需依赖于您在代码中编写的控制器。你可以试试这个替代方案。

f = open(sys.argv[1], 'rt')

timeStart = str(datetime.datetime.now())
print 'Starting brute force attack'

try:
    reader = csv.reader(f)
    count = 0
    for row in reader:
       print str(row)

finally:
    f.close()