我有以下指令:
app.directive('fileInput', ['$parse', function ($parse) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
element.bind('change', function () {
$parse(attrs.fileInput)
.assign(scope, element[0].files)
scope.$apply();
});
scope.$watch('files', function () {
console.log(scope.files);
});
},
controller: function ($scope, $element, $attrs) {
$element.bind('change', function () {
$parse($attrs.fileInput)
.assign($scope, $element[0].files)
$scope.$apply();
});
$scope.$watch('files', function () {
console.log($scope.files);
});
}
}
修改 这是控制器:
controllers.controller('RegisterCtrl', ['$scope', '$routeParams', '$location', '$http', 'Restangular', 'ServiceRepository',
function($scope, $routeParams, $location, $http, Restangular, ServiceRepository)
{
$scope.regService = function () {
$scope.error = {};
$scope.submitted = true;
var fd = new FormData();
fd.append("model", angular.toJson($scope.services));
console.log($scope.files);
}
}
这是视图文件
<input type="file" id="boarding-picture_where_sleeping" class="form-control" file-input="files" multiple>
提交表单时调用其他信息,regService()方法
当我调试$ scope.files时,它在控制台选项卡中可用。但在我的控制器中,它是未定义的
所以如何在指令和控制器之间进行同步 感谢
答案 0 :(得分:1)
答案 1 :(得分:0)
我会在指令定义中使用scope
和bindToController
属性,例如this blog中的以下代码段:
app.directive('someDirective', function () {
return {
scope: {
name: '='
},
controller: function () {
this.name = 'Pascal';
},
controllerAs: 'ctrl',
bindToController: true,
template: '<div>{{ctrl.name}}</div>'
};
});
它也需要使用controllerAs
语法,但你应该使用它,因为它比在各处传递$ scope并处理原型继承要清楚得多。建议John Papa's AngularJS Style Guide