함수에 인수로 전달 될 때 Angular $ scope 속성을 덮어 씁니다.

테일러 애 클리

알아낼 수없는 이상한 상황이 있습니다.

Angular 1.4에서는 양식 데이터를 수집하기위한 모델로 사용되는 범위 개체에 변수가 $scope.videoModel있습니다. 양식이 제출되면 모델이 함수로 전달되어 ng-submit="createVideo(videoModel)처리 및 정규식이 발생합니다. 예를 들어 YouTube ID를 추출합니다.

모든 것이 의도 한대로 작동하지만 범위 개체를 인수 ( payload)로 함수에 전달하더라도 인수에서 업데이트되는 특정 속성도 $scope.

내가 전달하는 경우 eample를 들어, $scope.videoModel.youtubecreateVideopayload, 다음 유튜브 ID를 추출하고 같은 지정 payload.youtube = payload.youtube.match(regEx);$scope.videoModel.youtube속성도 업데이트됩니다. 양식 값이 완전한 URL에서 ID로만 변경되기 때문에 이것을 볼 수 있습니다.

videoModel함수에 인수로 전달 하면 변수에 대한 복사본이 생성되지 않고 대신 참조되는 것 같습니다. 나는 그것에 대해 아무것도 찾을 수없는 것 같습니다. 나는 단순히 이와 같은 새로운 변수를 만들 수 있다고 생각 var tempVar = payload하지만 엉뚱한 것처럼 보이고 근본적으로 잘못된 일을하고 있는지 궁금합니다.

videoModel은 사본이 아닌 참조로 전달됩니까?

다음은 간결함을 위해 잘린 코드 샘플입니다.

HTML

<div class="form-group">
    <label for="inputPassword3" class="col-sm-2 control-label">YouTube Url</label>
    <div class="col-sm-10">
        <input class="form-control" ng-class="{ 'has-error' : newvideo.youtube.$invalid && newvideo.youtube.$touched, 'is-valid': newvideo.youtube.$valid }"  placeholder="Youtube Url" ng-model="videoModel.youtube" name="youtube" ng-pattern="youtubeValidateRegex" required>
        <div class="help-block" ng-messages="newvideo.youtube.$error" ng-show="newvideo.youtube.$touched">
            <p ng-message="required">YouTube Url is required.</p>
            <p ng-message="pattern">Please input a valid YouTube Url.</p>
        </div>
    </div>
</div>
 <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10" ng-if="!success">
     <button class="btn btn-default" ng-click="newVideo(videoModel)" ng-disabled="newvideo.$invalid"> Publish</button>
 </div>
      </div>

JS

$scope.videoModel = {
  youtube: 'https://www.youtube.com/watch?v=VkzVgiYUEIM',
  vimeo: 'https://vimeo.com/193391290'

};

  $scope.newVideo = function(payload) {
            $scope.processing = true;
            payload.user = $scope.user._id;
            payload.filename = $scope.filename;
            console.log(payload);
              if(payload.type === 'vimeo') {
                var matchVM = payload.vimeo.match($scope.vimeoExtractRegex);
                console.log(matchVM);
                if(matchVM) { //todo: helpers
                  payload.vimeo = matchVM[5];
              } else {
                return toastr.error('Unable to extract Vimeo ID');
              }
            }
              if(payload.type === 'youtube') {
                var matchYT = payload.youtube.match($scope.youtubeExtractRegex);
                  if (matchYT && matchYT[1].length === 11) { //todo: helpers
                    payload.youtube = matchYT[1];
                  } else {
                    return toastr.error('Unable to extract YouTube ID');
                  }
              }
            Videos.newVideo(payload)
                .then(function(result) {
                    toastr.success('New video created.');
                    $scope.processing = false;
                    $scope.success = true;
                    $scope.result = result.data.result;
                    $scope.payload = result.data.payload;  //I do assign part of the result to $scope.payload... but that still doesn't explain videoModel.youtube getting overwritten.
                })
                .catch(function(response) {
                    $scope.error = true;
                    toastr.error(response.data.message, response.data.status);
                });
                return $scope.success;
        };
깊은

JavaScript에서 객체 참조는 값입니다.

이 때문에 객체는 참조로 전달되는 것처럼 동작합니다.

함수가 객체 속성을 변경하면 원래 값이 변경됩니다.

객체 속성에 대한 변경 사항은 함수 외부에서 볼 수 있습니다 (반영).

http://www.w3schools.com/js/js_function_parameters.asp

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

GraphQL 및 Mongoose는 변이에서 인수가 전달되지 않은 상태에서 속성을 null로 덮어 씁니다.

분류에서Dev

std :: string :: c_str () 함수가 반환 한 이전 값을 덮어 씁니다.

분류에서Dev

생성자에서 멤버 함수로 전달 될 때 전용 멤버 변수가 null입니다.

분류에서Dev

TypeScript : 클래스에서 읽기 전용으로 표시된 속성을 실제로 덮어 씁니다.

분류에서Dev

ffmpeg는 forfiles 루프에서 호출 될 때 입력 파일을 덮어 씁니다.

분류에서Dev

컨트롤이 카메라 하위 활동에서 반환 될 때 기본 활동을 덮어 씁니다.

분류에서Dev

함수에서 변수로 전달 될 때 사전의 정보를 어떻게 얻습니까?

분류에서Dev

전역 변수가 세션 변수를 계속 덮어 씁니다.

분류에서Dev

함수에 인수로 전달 될 때 평가되기 전에 표현식의 내용을 캡처 할 수 있습니까?

분류에서Dev

앱이로드 될 때 처음에 작업을 전달할 수 없습니다.

분류에서Dev

for 루프에서 생성 된 람다 함수를 덮어 씁니다.

분류에서Dev

함수를 다른 함수에 인수로 전달할 때 해당 함수를 어떻게 반복합니까?

분류에서Dev

함수를 다른 함수에 인수로 전달할 때 해당 함수를 어떻게 반복합니까?

분류에서Dev

CPP의 함수에 전달 될 때 {}은 무엇입니까?

분류에서Dev

Excel 매크로가 변수 값을 덮어 씁니다.

분류에서Dev

목록에 플롯을 저장할 때 변수 geom_text를 덮어 씁니다.

분류에서Dev

C ++에서 인수로 함수에 전달 될 때 수정 된 객체

분류에서Dev

인수로 전달 될 때 PHP는 함수와 익명 함수를 어떻게 해석하고 평가합니까?

분류에서Dev

console.log는 다른 함수에 인수로 전달되고 내부에서 호출 될 때 함수가 아닙니다.

분류에서Dev

console.log는 다른 함수에 인수로 전달되고 내부에서 호출 될 때 함수가 아닙니다.

분류에서Dev

새 키와 값을 추가 할 때 사전 값을 덮어 씁니다.

분류에서Dev

gls 함수에 다른 함수 내부의 인수로 적용될 때 데이터 이름이 전달되지 않습니다.

분류에서Dev

r의 함수에 전달 될 때 선택적 입력이 어떻게 해결됩니까?

분류에서Dev

객체가 Angular2 구성 요소에서 매개 변수로 전달 될 때 외부 HTML 파일의 JavaScript 함수가 호출되지 않음

분류에서Dev

덮어 쓸 수 있도록 cstring을 인수로 전달

분류에서Dev

addin에 인수로 전달 될 때 ember.js 구성 요소에 값 전달 (예 : ember-bootstrap-modals-manager)

분류에서Dev

href 태그에서 호출했을 때 함수에 인수를 어떻게 전달할 수 있습니까?

분류에서Dev

파이프 라인 매개 변수가 변수 값을 덮어 씁니다.

분류에서Dev

iOS는 전면 카메라 플래시의 새 값으로 EXIF 플래시 속성을 덮어 씁니다.

Related 관련 기사

  1. 1

    GraphQL 및 Mongoose는 변이에서 인수가 전달되지 않은 상태에서 속성을 null로 덮어 씁니다.

  2. 2

    std :: string :: c_str () 함수가 반환 한 이전 값을 덮어 씁니다.

  3. 3

    생성자에서 멤버 함수로 전달 될 때 전용 멤버 변수가 null입니다.

  4. 4

    TypeScript : 클래스에서 읽기 전용으로 표시된 속성을 실제로 덮어 씁니다.

  5. 5

    ffmpeg는 forfiles 루프에서 호출 될 때 입력 파일을 덮어 씁니다.

  6. 6

    컨트롤이 카메라 하위 활동에서 반환 될 때 기본 활동을 덮어 씁니다.

  7. 7

    함수에서 변수로 전달 될 때 사전의 정보를 어떻게 얻습니까?

  8. 8

    전역 변수가 세션 변수를 계속 덮어 씁니다.

  9. 9

    함수에 인수로 전달 될 때 평가되기 전에 표현식의 내용을 캡처 할 수 있습니까?

  10. 10

    앱이로드 될 때 처음에 작업을 전달할 수 없습니다.

  11. 11

    for 루프에서 생성 된 람다 함수를 덮어 씁니다.

  12. 12

    함수를 다른 함수에 인수로 전달할 때 해당 함수를 어떻게 반복합니까?

  13. 13

    함수를 다른 함수에 인수로 전달할 때 해당 함수를 어떻게 반복합니까?

  14. 14

    CPP의 함수에 전달 될 때 {}은 무엇입니까?

  15. 15

    Excel 매크로가 변수 값을 덮어 씁니다.

  16. 16

    목록에 플롯을 저장할 때 변수 geom_text를 덮어 씁니다.

  17. 17

    C ++에서 인수로 함수에 전달 될 때 수정 된 객체

  18. 18

    인수로 전달 될 때 PHP는 함수와 익명 함수를 어떻게 해석하고 평가합니까?

  19. 19

    console.log는 다른 함수에 인수로 전달되고 내부에서 호출 될 때 함수가 아닙니다.

  20. 20

    console.log는 다른 함수에 인수로 전달되고 내부에서 호출 될 때 함수가 아닙니다.

  21. 21

    새 키와 값을 추가 할 때 사전 값을 덮어 씁니다.

  22. 22

    gls 함수에 다른 함수 내부의 인수로 적용될 때 데이터 이름이 전달되지 않습니다.

  23. 23

    r의 함수에 전달 될 때 선택적 입력이 어떻게 해결됩니까?

  24. 24

    객체가 Angular2 구성 요소에서 매개 변수로 전달 될 때 외부 HTML 파일의 JavaScript 함수가 호출되지 않음

  25. 25

    덮어 쓸 수 있도록 cstring을 인수로 전달

  26. 26

    addin에 인수로 전달 될 때 ember.js 구성 요소에 값 전달 (예 : ember-bootstrap-modals-manager)

  27. 27

    href 태그에서 호출했을 때 함수에 인수를 어떻게 전달할 수 있습니까?

  28. 28

    파이프 라인 매개 변수가 변수 값을 덮어 씁니다.

  29. 29

    iOS는 전면 카메라 플래시의 새 값으로 EXIF 플래시 속성을 덮어 씁니다.

뜨겁다태그

보관