AngularJs从动态创建的元素调用控制器函数

时间:2015-04-15 07:15:50

标签: javascript angularjs model-view-controller

我有一个控制器,想要创建动态元素。当我创建它时,元素应该调用控制器函数,但函数不会被调用

app.controller('AbnTestController', ['$scope','$timeout',function($scope,$timeout) {
 ..........................
var tree1;
tree1 = [
  {
    label: 'test1',
    id:'1',
    type:'t',

  }];
  return $scope.addnew= function() {
  .........
   something

};

在我的指令中,我创建了动态元素;

app.directive('mytree', [
'$timeout', function($timeout) {
  return {
    restrict: 'E',
    controller: function($scope) {
      $scope.launch = function (mn) {........something.....}},

     template: "<a ng-click='addnew()'>Click</a>",
    replace: true,
    scope: {
      treeData: '=',
      onSelect: '&',    
      initialSelection: '@',
      treeControl: '='
    } 
    ...........
    }}]);

我想从动态创建的元素中调用'addnew'函数。

1 个答案:

答案 0 :(得分:0)

每个指令都有一个孤立的范围。

这意味着'addNew'功能在指令模板所在的范围内不可用。

要完成此操作,您可以将以下行添加到指令定义的“scope”属性中:

addNew: '&'

这会将scope属性绑定到原始范围(请参阅:https://docs.angularjs.org/guide/directive

您的指令应如下所示:

app.directive('mytree', [
 '$timeout', function($timeout) {
  return {
restrict: 'E',
controller: function($scope) {
  $scope.launch = function (mn) {........something.....}},

 template: "<a ng-click='addnew()'>Click</a>",
replace: true,
scope: {
  treeData: '=',
  onSelect: '&',    
  initialSelection: '@',
  treeControl: '=',
  addNew: '&'
} 
...........
}}]);