我有一个控制器,它引用了一个指令。该指令有自己的控制器。我的指令有ng-file-upload(这是另一个指令本身)。在控制器和指令之间传递值
我在指令中有一些字段需要作为数组传回主控制器。我该怎么做呢?
干杯!
我有一个控制器,它引用了一个指令。该指令有自己的控制器。我的指令有ng-file-upload(这是另一个指令本身)。在控制器和指令之间传递值
我在指令中有一些字段需要作为数组传回主控制器。我该怎么做呢?
干杯!
你可能在你的指令中使用了隔离作用域?您可以使用=
一个范围值绑定到控制器的范围,像这样:
angular.module('appName').directive('directiveName', function() {
return {
restrict:'E',
scope: { boundScopeValue : '=' },
link: function(scope) {
scope.boundScopeValue = 'Beam me up scotty!';
}
}
}
有关分离范围和各种范围的方法的详细信息,检查出这个伟大的SO问题的答案:What is the difference between '@' and '=' in directive scope in AngularJS?
另一个最好的选择也是在你的控制器中定义一个函数,然后当你想传入值并在控制器中执行操作时,在你的指令中调用它。
隔离范围将是在指令的内部范围内映射外部作用域成员的最佳选择。
但是,第二个选项的示例如下。
<div ng-controller="MyCtrl">
<div my-directive callback-fn="ctrlFn(arg1)"></div>
</div>
var app = angular.module('myApp',[]);
app.directive('myDirective', function() {
return {
scope: { someCtrlFn: '&callbackFn' },
link: function(scope, element, attrs) {
scope.someCtrlFn({arg1: 22});
},
}
});
app.controller('MyCtrl', function($scope) {
$scope.ctrlFn = function(test) {
console.log(test);
}
});
这是一个有效的答案,但我不希望将范围变量作为范围变量传递,这不是我的要求。感谢您的答复。 +1的答案虽然:) – Immortal
我将此作为答案添加,因为这最适合我的要求。万分感谢。 – Immortal