我正在使用angular@1.6.3
,bootstrap@3.3.7
和jquery@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}}">
它运作得很好。
但是,我试图推广这个组件,所以我不想依赖控制器。
答案 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()