2015-12-01 99 views
0

我有一个控制器,它引用了一个指令。该指令有自己的控制器。我的指令有ng-file-upload(这是另一个指令本身)。在控制器和指令之间传递值

我在指令中有一些字段需要作为数组传回主控制器。我该怎么做呢?

干杯!

回答

1

你可能在你的指令中使用了隔离作用域?您可以使用=一个范围值绑定到控制器的范围,像这样:

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?

另一个最好的选择也是在你的控制器中定义一个函数,然后当你想传入值并在控制器中执行操作时,在你的指令中调用它。

+0

我将此作为答案添加,因为这最适合我的要求。万分感谢。 – Immortal

1

隔离范围将是在指令的内部范围内映射外部作用域成员的最佳选择。

但是,第二个选项的示例如下。

<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); 
    } 
}); 
+0

这是一个有效的答案,但我不希望将范围变量作为范围变量传递,这不是我的要求。感谢您的答复。 +1的答案虽然:) – Immortal

相关问题