찾다

 >  Q&A  >  본문

angular.js - Angular控制器和指令的交互

HTML部分

<index></index>

指令

angular.module('todoWithAngularApp').directive('index', function () {
    return {
        restrict: 'E',
        templateUrl: '/scripts/template/index.html',
        replace: true,
        link: function (scope, iElement, iAttrs) {
            console.log(scope);
            console.log(iElement);
            console.log(iAttrs);

            iElement.on('click', '#addTaskClass', function(event) {
                scope.addTaskClassBoxDisplay = true;
                console.log(scope.addTaskClassBoxDisplay);

            })
        }
    };

控制器

angular.module('todoWithAngularApp').controller('IndexCtrl', function ($scope) {
    $scope.addTaskClassBoxDisplay = false;
});

怎样才能让指令去修改控制器上的$scope的属性

淡淡烟草味淡淡烟草味2744일 전713

모든 응답(6)나는 대답할 것이다

  • 阿神

    阿神2017-05-15 16:55:35

    무책임하고 검증되지 않았습니다. 다음은 몇 가지 아이디어입니다.
    1. addTaskClassBoxDisplay를 객체 아래에 배치합니다(예:
    ). scope.obj.addTaskClassBoxDisplay = true
    2. 메시지 사용
    3. 서비스 이용

    위의 세 가지 방법은 Angular의 모듈 간에 데이터를 공유하는 일반적인 방법이기도 하며 다양한 시나리오에 적용할 수 있습니다.

    회신하다
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-15 16:55:35

    http://stackoverflow.com/questions/14115701/angularjs-create-a-directi...


    으아악

    회신하다
    0
  • 为情所困

    为情所困2017-05-15 16:55:35

    먼저 독립된 범위를 열고 '='를 사용하여 범위의 개체에 대해 양방향 바인딩을 수행합니다. 아래 예와 같이 명령어의 obj가 바인딩되어 addTaskClassBoxDisplay 개체에 전송됩니다.

    으아악

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-15 16:55:35

    이 질문을 하기 전에 질문을 정정하겠습니다.
    컨트롤러의 $scope를 수정하려고 합니다. 우선, 사용자가 직접 정의한 명령어는 컨트롤러의 범위입니다. 별도의 범위를 상속하거나 생성하지 않습니다. 따라서 명령어 범위에서 속성을 수정하면 이 명령어를 참조하는 컨트롤러 범위의 해당 속성도 확실히 수정됩니다.
    컨트롤러를 작성할 때 컨트롤러의 범위를 수정하지 않은 이유는 무엇입니까?
    그 이유는 당신이
    를 사용했기 때문입니다. iElement.on('click', '#addTaskClass', function(event) {
    범위.addTaskClassBoxDisplay = true;
    직접 정의한 클릭 리스너는 범위 속성의 수정을 트리거하며 더티 검사를 수행하도록 Angular에 알리지 않습니다. 즉, addTaskClassBoxDisplay를 수정하면 페이지에서 응답하지 않습니다.
    이 오류를 해결하는 방법. $apply()만 추가하면 됩니다. 더티 검사를 수동으로 실행합니다. 사용 방법은 Baidu에 직접 물어보세요.
    이제 질문으로 돌아갑니다. 지시어가 컨트롤러의 범위를 수정하도록 하는 방법.
    1. 지시어의 내부 속성부터 시작해 보겠습니다.
    지시문의 범위 속성, 세 가지 메소드는 컨트롤러의 범위를 수정할 수 있습니다.
    1.범위가 정의되지 않았거나 범위:false입니다. 컨트롤러의 범위를 직접 사용합니다
    2. 범위: 사실입니다. 컨트롤러를 상속하는 범위입니다. 이때 수정하려는 콘텐츠는 객체로 정의하는 것이 가장 좋습니다.
    3. 범위: {키:'=키'}. 독립적인 범위입니다. 수정 방법은 위와 동일하며, 객체로 정의하는 것이 가장 좋습니다
    그런 다음 다른 사람에게 말하십시오. iAttrs를 사용하여 이를 지시어의 속성으로 정의합니다.
    var 모델 = $parse(iAttrs.addTaskClassBoxDisplay);
    iElement.on('click', '#addTaskClass', function(event) {
    모델.할당(범위,참);
    범위.$apply();
    2. 라디오를 사용하세요. 특히 바이두.
    3. 배송을 위해 서비스를 이용하세요.
    4. 명령은 $rootScope를 호출한 다음 컨트롤러의 범위 속성을 $rootScope 속성과 동일하게 만듭니다. (이러지 마세요)
    이제 출근 시간이므로 나중에 Baidu를 사용할 수 있습니다.

    회신하다
    0
  • 世界只因有你

    世界只因有你2017-05-15 16:55:35

    http://www.hubwiz.com/course/54f3ba65e564e50cfccbad4b/
    기본 사항: http://www.hubwiz.com/course/547c3e3b88dba0087c55b4e5/

    회신하다
    0
  • 漂亮男人

    漂亮男人2017-05-15 16:55:35

    좋은 질문이네요. 저도 물어보고 싶습니다

    회신하다
    0
  • 취소회신하다