AngularJS 컨트롤러 $ scope가 ng-if 지시문 내에서 작동하지 않습니다.

알바로 페드라 자

로그인 양식이 있지만 어떤 이유로 데이터가 HTML과 컨트롤러 사이에 바인딩되지 않습니다. 이것은 내 코드입니다.

home.html

<div ng-if="loggedIn">
    <h2>Welcome!</h2>
    <p>Some other welcome content...</p>
</div>

<form ng-if="!loggedIn">
    <input type="text" placeholder="Username" ng-model="username">
    <input type="password" placeholder="Password" ng-model="password">
    <button type="submit" data-ng-click="login()">Login</button>
</form>

참고 : 레이블, 클래스 및 ID는 간결함을 위해 생략되었습니다.

controller.js

myapp.controller('HomeController', ['$scope', '$log', function(scope, log) {
    scope.loggedIn = false;
    // ADDED CODE HERE

    scope.login = function() {
        // Dummy validation
        if(scope.username == 'admin' && scope.password == 'admin') {
            scope.loggedIn = true;
        };
        log.log('username: ' + scope.nombreUsuario);
        log.log('password: ' + scope.password);
        log.log('is logged in: ' + scope.loggedIn);
    };
}]);

config.js

myapp.config(['$locationProvider', '$routeProvider', function(locationProvider, routeProvider) {
    // Remove default '!' from URL
    locationProvider.hashPrefix('');

    routeProvider
    .when('/', {
        templateUrl: 'templates/home.html',
        controller: 'HomeController'
    })
    // ... some other .when ...
    .otherwise({
        redirectTo: '/'
    });
}]);

이것을 실행하면 login함수 의 콘솔 출력은 다음과 같습니다.

username: undefined
password: undefined
is logged in: false

그러나 //ADDED CODE HERE섹션 의 컨트롤러에 다음을 추가하면

scope.username = 'admin';
scope.password = 'admin';

콘솔은 다음을 제공합니다.

username: admin
password: admin
is logged in: true

즉, 제대로 작동하고 있습니다. 그래서 질문은 : 왜 내 뷰 ( ng-model="...")가 컨트롤러의 범위에 바인딩되지 않습니까? 내가 여기서 뭘 놓치고 있니?

귀하의 답변에 미리 감사드립니다.

그냥 액세스 $parent범위를 $parent.username, $parent.password그리고 당신은이처럼 잘 될 것입니다 데모 바이올린 .

같은 일부 지시문 ng-if은 하위 범위를 생성하므로 상위 범위에 액세스해야합니다. (Thx @FrankModica). 예를 들어 당신이 사용하는 경우 ng-show또는 ng-hide사용자가 액세스 할 필요가없는 $parent범위 ( 데모 바이올린 하는 용도 ng-show).

<form ng-if="!loggedIn">
    <input type="text" placeholder="Username" ng-model="$parent.username">
    <input type="password" placeholder="Password" ng-model="$parent.password">
    <button type="submit" data-ng-click="login()">Login</button>
</form>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 AngularJS보기는 컨트롤러의 범위에 액세스 할 수 있지만 ng-repeat가 작동하지 않습니다.

분류에서Dev

AngularJS greetController 컨트롤러가 작동하지 않습니다.

분류에서Dev

AngularJS 컨트롤러가 IntelliJ의 ngRoute에서 작동하지 않습니다 (웹 서버 문제?)

분류에서Dev

Angular ng-repeat가 자식 컨트롤러에서 작동하지 않습니다.

분류에서Dev

$ scope가 내 angularjs 앱에서 작동하지 않습니다.

분류에서Dev

내 컨트롤러 내에서 동적으로 추가 된 HTML에 대해 ng-show가 작동하지 않습니다.

분류에서Dev

self.window가 뷰 컨트롤러 내에서 작동하지 않습니다.

분류에서Dev

this.transitionToRoute가 내 컨트롤러 Ember에서 작동하지 않습니다.

분류에서Dev

부모 컨트롤러의 $ scope. $ watch가 자식 ng-select에서 트리거되지 않습니다.

분류에서Dev

AngularJS : 지시문은 $ scope에 개체를 추가하지만 컨트롤러에는 정의되지 않았습니다.

분류에서Dev

ng-show가 angularjs에서 작동하지 않습니다.

분류에서Dev

ng-view가 angularjs에서 작동하지 않습니다.

분류에서Dev

ng-keypress가 angularjs에서 작동하지 않습니다.

분류에서Dev

ng-show가 angularjs에서 작동하지 않습니다.

분류에서Dev

ng-include가 angularJS에서 작동하지 않습니다.

분류에서Dev

범위가 컨트롤러의 ajax 요청으로 AngularJS 지시문에서 정의되지 않았습니다.

분류에서Dev

구문 Angularjs로 컨트롤러가 작동하지 않음

분류에서Dev

동일한 컨트롤러에서 AngularJs ng-if 함수 호출이 작동하지 않음

분류에서Dev

angularjs $ watch가 지시문에서 작동하지 않습니다.

분류에서Dev

parseInt가 Angularjs 컨트롤러 내부의 스피 티드 날짜에서 생성 된 배열의 데이터로 작동하지 않습니다.

분류에서Dev

angularjs : 이벤트가 컨트롤러에 전달되지 않고 해당 시간에 작동하지 않을 수 있습니다.

분류에서Dev

angularjs의 지시문 함수 내에서 현재 컨트롤러 $ scope를 얻는 방법은 무엇입니까?

분류에서Dev

AngularJS 컨트롤러가 ng-Route 동안 제대로로드되지 않았습니다.

분류에서Dev

$ location.path가 컨트롤러에서 작동하지 않습니다.

분류에서Dev

$ location.path가 컨트롤러에서 작동하지 않습니다.

분류에서Dev

컨트롤러가 Laravel의 route.php에서 작동하지 않습니다.

분류에서Dev

컨트롤러가 스프링에서 작동하지 않습니다.

분류에서Dev

ng-class가 angularJs의 ng-include에 포함 된 파일 내에서 작동하지 않습니다.

분류에서Dev

ng-class가 angularJs의 ng-include에 포함 된 파일 내에서 작동하지 않습니다.

Related 관련 기사

  1. 1

    내 AngularJS보기는 컨트롤러의 범위에 액세스 할 수 있지만 ng-repeat가 작동하지 않습니다.

  2. 2

    AngularJS greetController 컨트롤러가 작동하지 않습니다.

  3. 3

    AngularJS 컨트롤러가 IntelliJ의 ngRoute에서 작동하지 않습니다 (웹 서버 문제?)

  4. 4

    Angular ng-repeat가 자식 컨트롤러에서 작동하지 않습니다.

  5. 5

    $ scope가 내 angularjs 앱에서 작동하지 않습니다.

  6. 6

    내 컨트롤러 내에서 동적으로 추가 된 HTML에 대해 ng-show가 작동하지 않습니다.

  7. 7

    self.window가 뷰 컨트롤러 내에서 작동하지 않습니다.

  8. 8

    this.transitionToRoute가 내 컨트롤러 Ember에서 작동하지 않습니다.

  9. 9

    부모 컨트롤러의 $ scope. $ watch가 자식 ng-select에서 트리거되지 않습니다.

  10. 10

    AngularJS : 지시문은 $ scope에 개체를 추가하지만 컨트롤러에는 정의되지 않았습니다.

  11. 11

    ng-show가 angularjs에서 작동하지 않습니다.

  12. 12

    ng-view가 angularjs에서 작동하지 않습니다.

  13. 13

    ng-keypress가 angularjs에서 작동하지 않습니다.

  14. 14

    ng-show가 angularjs에서 작동하지 않습니다.

  15. 15

    ng-include가 angularJS에서 작동하지 않습니다.

  16. 16

    범위가 컨트롤러의 ajax 요청으로 AngularJS 지시문에서 정의되지 않았습니다.

  17. 17

    구문 Angularjs로 컨트롤러가 작동하지 않음

  18. 18

    동일한 컨트롤러에서 AngularJs ng-if 함수 호출이 작동하지 않음

  19. 19

    angularjs $ watch가 지시문에서 작동하지 않습니다.

  20. 20

    parseInt가 Angularjs 컨트롤러 내부의 스피 티드 날짜에서 생성 된 배열의 데이터로 작동하지 않습니다.

  21. 21

    angularjs : 이벤트가 컨트롤러에 전달되지 않고 해당 시간에 작동하지 않을 수 있습니다.

  22. 22

    angularjs의 지시문 함수 내에서 현재 컨트롤러 $ scope를 얻는 방법은 무엇입니까?

  23. 23

    AngularJS 컨트롤러가 ng-Route 동안 제대로로드되지 않았습니다.

  24. 24

    $ location.path가 컨트롤러에서 작동하지 않습니다.

  25. 25

    $ location.path가 컨트롤러에서 작동하지 않습니다.

  26. 26

    컨트롤러가 Laravel의 route.php에서 작동하지 않습니다.

  27. 27

    컨트롤러가 스프링에서 작동하지 않습니다.

  28. 28

    ng-class가 angularJs의 ng-include에 포함 된 파일 내에서 작동하지 않습니다.

  29. 29

    ng-class가 angularJs의 ng-include에 포함 된 파일 내에서 작동하지 않습니다.

뜨겁다태그

보관