2013-07-10 5 views
2

다른 "함수가 정의되지 않았습니다"라는 질문을 살펴본 적이 있지만 사용 사례에 해당하는 질문을 찾을 수 없습니다. angular.js를 사용하고 있습니다.angularjs 컨트롤러 내에 정의 된 함수에 함수가 정의되지 않았습니다.

나는 처음에는 js에서 동적으로 채워지는 빈 div, #mylist를 가지고 있습니다. 체크 박스의 onChange 이벤트에 할당 할 컨트롤러 내부에 정의 된 함수가 있습니다.

<!doctype html> 
<html data-ng-app="testapp"> 
<head> 
    <script src="jquery-1.10.2.min.js"></script> 
    <script src="angular.min.js"></script> 
    <script> 
     var app = angular.module("testapp", []);   
     app.controller("MyAppController", function ($scope) { 
      createCheckbox(); 

      function doSomething() { 
       alert("hello!"); 
      } 

      function createCheckbox() { 
       $("#mylist").html("<input type='checkbox' onChange='javascript:doSomething();' />"); 
      }  
     }); 
    </script> 
</head> 

<body data-ng-controller="MyAppController"> 
    <div id="mylist"></div> 
</body> 
</html> 

기능하지 정의 오류가있는 확인란 결과를 클릭, 실행

여기에 전체 문서입니다.

무엇이 여기에 있습니까? 감사. 당신이 AngularJS와를 사용하는 경우에만 (당신이 범위. 컨트롤러 $ 범위의 필드가 할 수있는 기능을 대신의 onChange 당신이 ngChange 지시어를 사용할 수있는 내부

+0

나는 "당신이 잘못하고있다"라는 의역이 각도 토론 (그리고 일반적으로 사실입니다) 주위에서 말한 가장 일반적인 것이라고 생각합니다. 그래서 기본적으로 jQuery를 사용하여 DOM 요소를 가져 오면 안됩니다 ... 1 초는 내가 쉽게 대답 할 수 있다고 생각합니다. – shaunhusain

+0

당분간 저는 라우팅을 위해 각도를 사용하고 있습니다. 그것은 진보 된 js 개발자가 아니며, 실수가 각도 또는 jq인지 일반 js인지 여부를 알 수 없었습니다. 나를 이끄는 방향으로 도움을 요청하는 것이 합리적이라고 생각합니다. – Steven

+0

@ 스터븐 나는 비하하거나 무례하다는 뜻이 아니었다. 단지 최근에 많이 언급 된 성격과 컬트처럼 들리게하는 "각도 방식"이라는 말을 들었다. 나는 JS 전문가도 아니지만 AS3/Flex에서 AngularJS로 건너 뛰었습니다. jQuery는 항상 내게 엉망인 것처럼 보였습니다. Angular는 모든 막대 사탕이 아니지만, 조직화되고 오류가 발생하기 쉽습니다. 어쨌든 내 대답은 약간의 의미가 있기를 바랍니다. 기본적으로 바인딩을 사용하여 해당 변수를보고있는 함수를 트리거하므로 변수가 변경되면 함수가 트리거됩니다. – shaunhusain

답변

0
<!doctype html> 
<html data-ng-app="testapp"> 
<head> 
    <script src="jquery-1.10.2.min.js"></script> 
    <script src="angular.min.js"></script> 
    <script> 

var app = angular.module("testapp", []); 

app.controller("MyAppController", function ($scope) { 
    $scope.someProperty = true; 


    $scope.$watch("someProperty", function (someProperty){ 
     alert("hello!"+someProperty) 
    }); 
}); 

    </script> 
</head> 
<body data-ng-controller="MyAppController"> 
    <div id="mylist"><input type="checkbox" ng-model="someProperty"/></div> 
</body> 

</body> 
</html> 

http://jsfiddle.net/y6XhY/

+0

샘플을 작성해 주셔서 감사합니다. 나는 이것을 통해 살펴볼 것이다. – Steven

+0

이런 경우 (체크 박스 포함) ng-click = "doSomething()"과 같은 HTML 범위에서 함수를 호출하려면 ng-click을 사용할 수 있습니다 (또는 ng-change = " doSomething() ") 처음에 입력 유형"텍스트 "를 생각하는 속성 버전을 처음 보았습니다. – shaunhusain

0

, 그것은 정의 함수에 좋은 연습입니다 해당 입력에 ngModel을 설정해야합니다.)

$scope.doSomething = function() { 
    alert("hello!"); 
} 
관련 문제