2016-11-15 7 views
0

Я пытаюсь вызвать вложенную функцию в угловом. Я отформатировал функции таким образом, чтобы аккумулировать код, но при вызове функции через ng-click он, похоже, не работает.Call Угловые вложенные функции

В моем случае возникает конфликт областей, поскольку имя переменной берется локальной областью, поэтому я назвал контроллер и вызвал его как дочернее свойство контроллера, но не успел.

Я создал jsfiddle, чтобы продемонстрировать, что я имею в виду: https://jsfiddle.net/838L40hf/16/

HTML:

<div class="InviteAppContainer" ng-app="InviteApp"> 
    <div ng-controller="InviteController as cntrl"> 
     <button ng-click="alert()"> 
     Alert, standard 
     </button> 

     <div ng-repeat="invite in invites"> 
     <button ng-click="cntrl.invite.alert(invite.name)"> 
      Alert, {{invite.name}} 
     </button> 
     </div> 
    </div> 
</div> 

JS:

var InviteApp = angular.module('InviteApp',[]) 
.controller('InviteController', function($scope) { 
    $scope.invites = { 
    0 : { 
     "name":"invite 1", 
     }, 
    1 :{ 
     "name" : "invite 2" 
     } 
    }; 

    $scope.invite = { 
    alert : function(name) { 
      alert(name); 
    } 
    }; 

    $scope.alert = function() { 
     alert("alert2!"); 
    }; 
}); 

ответ

0

var InviteApp = angular.module('InviteApp',[]) 
 
.controller('InviteController', function($scope) { 
 
\t $scope.invites = { 
 
    \t 0 : { 
 
    \t "name":"invite 1", 
 
\t \t }, 
 
    1 :{ 
 
    \t "name" : "invite 2" 
 
\t \t } 
 
    }; 
 

 
\t $scope.invite = { 
 
    \t alert : function(name) { 
 
\t \t \t alert(name); 
 
    \t } 
 
    }; 
 

 
\t $scope.alert = function() { 
 
\t \t alert("alert2!"); 
 
\t }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div class="InviteAppContainer" ng-app="InviteApp"> 
 
    \t <div ng-controller="InviteController as cntrl"> 
 
     <button ng-click="alert()"> 
 
     Alert, standard 
 
     </button> 
 
     
 
     <div ng-repeat="i in invites"> 
 
     <button ng-click="invite.alert(i.name)"> 
 
      Alert, {{i.name}} 
 
     </button> 
 
     </div> 
 
    </div> 
 
</div>

Что я редактирую:

<div ng-repeat="i in invites"> 
    <button ng-click="invite.alert(i.name)"> 
     Alert, {{i.name}} 
    </button> 
</div> 
+0

спасибо, что работает как работа вокруг, но мне было интересно, если есть способ, чтобы целевой родительской области, возможно, ? – kirgy

+0

@kirgy Я не знаю, почему вы хотите это сделать, но это похоже на сокращение синтаксиса. Я предлагаю использовать 'object.function_name' вместо' controller.object.function_name' –

+0

По той же причине, почему вы хотели бы использовать parent.variable в любой конфликтной функции JS-scope. – kirgy

3

Если вы используете синтаксис controller as, вы должны быть обязательными вещами для this вместо $scope если вы хотите получить доступ к ним через совмещенное имя контроллера.

Простое изменение привязки от $scope.invite до this.invite сделает трюк.

https://jsfiddle.net/pL4wc10n/

1

Вы должны использовать this

Javascript

var InviteApp = angular.module('InviteApp',[]) 
    .controller('InviteController', function($scope) { 
    // controllerAs : cntrl 
    var that = this; 

    $scope.invites = { 
    0 : { 
     "name":"invite 1", 
    }, 
    1 :{ 
     "name" : "invite 2" 
    } 
    }; 
    // USING THIS you have cntrl.function 
    that.invite = { 
    alert : function(name) { 
     alert(name); 
    } 
    }; 

    $scope.alert = function() { 
    alert("alert2!"); 
    }; 
});