2015-02-04 5 views
1

Я пытаюсь использовать ng-click для вызова функции в контроллере, но я не смог заставить ее работать. Я раздели все, вплоть до своей простейшей форме, так что теперь у меня есть это:AngularJS ng-click Директива Не вызывающая функция

<button id="submitBtn" type="submit" class="btn btn-default" 
    ng-click="count = count + 1; count = count + 2; alert('hello');" >Submit</button>  

Первые два оператора (кол = кол + 1; кол = кол + 2;) выполнять только штрафом, но он выиграл Не вызывайте функцию предупреждения. Когда я вынимаю два выражения с инкрементным счетчиком, предупреждение все равно не будет работать. В любое время, когда я пытаюсь вызвать функцию, она терпит неудачу, но работает простой старый Javascript.

(Просто FYI, у меня есть Javascript вниз по странице, которая предотвращает отправку формы и запуск обратной передачи).

Edit:

Я буду включать код моего контроллера для этого:

myApp.controller('LawSearchController', ['$scope', function ($scope) { 

    $scope.alert = function (text) { 
     alert(text); 
    }; 
}]); 
+0

Это * должен * работать. Итак, я думаю * проблема лежит вне кода, размещенного здесь. Лучше всего сделать скрипку.(Я буду рисковать диким угаданием: вы уверены, что сфера действия кнопки на самом деле контролируется данным контроллером?) –

+0

Нет причин, чтобы этого не было. Может быть, слишком много рабочих частей, чтобы понять это. Приложение ASP.NET с кучей различных js-библиотек (jquery, угловой, jquery.validate + другие пользовательские). – Connor

+0

Говорил слишком скоро, вы правы! - См. Ответ. – Connor

ответ

5

Все функции вы называете в ng-expression в контексте $ охвата.

Итак, когда вы говорите alert(), он компилируется в scope.alert(), который является неопределенным и терпит неудачу.

В контроллере, включает в себя код

$scope.alert = alert

+0

Я попытался вызвать другие функции в контроллере и не повезло. Я также попытался представить ваше предложение в своем контроллере, и это не сработало. – Connor

0

Как один из ответивших отметила, что вам нужно иметь функцию в контроллере, как например:

$scope.alert = function(arg) { 
    // Do something 
}; 
+0

См. Править выше. – Connor

0

Для дальнейшего использования , вот моя проблема:

Я попытался разместить мою директиву ng-controller с тегом <form> на своей странице. Это приложение asp.net с MasterPage, и (почему, я не знаю) форма заменяется при создании страницы с новой формой, которая обертывает весь контент. В результате моя директива ng-controller исчезла.

Я также попытался разместить директиву ng-controller в теге <asp:Content>, но это также удаляется.

Решение:

Wrap моя страница <form> в <div> и поместить директиву нг-контроллера там.

0

Я не верю, что это предполагаемое использование ngClick, чтобы содержать много javascript. Вы должны только вызывать функцию 1 в клике NG, и эта функция должна вызывать остальные

Я верю, что это должно быть реализовано как нечто похожее на следующее, и я думаю, вам нужно получить функцию предупреждения из области корня. или

HTML Snippit

<button id="submitBtn" type="submit" class="btn btn-default" ng-click="submitAndAlert()" >Submit</button> 

Контроллер

myApp.controller('controllerName', ['$scope', '$rootScope', function ($scope, $rootScope) { 
    $scope.count = 0; 

    $scope.submitAndAlert = function(){ 
     count += 1; 
     count += 2; 
     alert('hello'); 
    } 

    $scope.alert = function (text) { 
     // $rootScope.window.alert(text); 
     $rootScope.alert(text); 
    }; 
}]); 
Смежные вопросы