programing

개체를 호출할 수 없습니다.angularjs 키

batch 2023. 3. 2. 22:07
반응형

개체를 호출할 수 없습니다.angularjs 키

UI를 사용하고 있습니다.부트스트랩 아코디언과 나는 내 제목을 다음과 같이 정의했다.

<accordion-group ng=repeat="(cname, stations) in byClient">
    <accordion-heading>
        {{ cname }} <span class="pull-right"> {{ Object.keys(stations).length }} Stations</span>
    </accordion-heading>

이 메시지가 뜨면Object.keys(stations).length아무것도 해결되지 않습니다.컨트롤러에 같은 길이의 콜을 넣으면 예상 카운트가 반환됩니다.Method Call이 AngularJS에서 동작하지 않는 원인이 있습니까?

나머지 아코디언은stations예상대로 동작하기 때문에 올바르게 입력되고 있는 것을 알 수 있습니다.byClient데이터 구조는 기본적으로 다음과 같습니다.

{
    "Client Name" : {
        "Station Name": [
            {...},
            {...}
        ]
    }
 }

네, 그 이유는Object의 일부입니다.window/global각도가 스코프에 대해 그 식을 평가할 수 없습니다.지정한 경우Object.keys당신의 결합 각도에서 그것을 평가하려고 합니다.$scope찾을 수 없습니다.참조를 저장할 수 있습니다.object.keysrootScope의 일부 유틸리티에서 사용할 수 있습니다.

이런 느낌:-

angular.module('yourApp',[deps...]).run(function($rootScope){
  //Just add a reference to some utility methods in rootscope.
  $rootScope.Utils = {
     keys : Object.keys
  }

  //If you want utility method to be accessed in the isolated Scope 
  //then you would add the method directly to the prototype of rootScope 
  //constructor as shown below in a rough implementation.

  //$rootScope.constructor.prototype.getKeys = Object.keys;

});

이것을 다음과 같이 사용합니다.

<span class="pull-right"> {{ Utils.keys(stations).length }} Stations</span>

격리된 범위를 제외한 모든 하위 범위에서 사용할 수 있습니다.격리된 범위(예: 격리된 범위 지침)에서 작업을 수행할 계획인 경우 다음 참조를 추가해야 합니다.Object.keys스코프에서 또는 스코프에서 길이를 반환하는 메서드를 노출할 때.

또는 키 길이를 반환하는 형식 필터를 생성하여 어디에서나 사용할 수 있습니다.

app.filter('keylength', function(){
  return function(input){
    if(!angular.isObject(input)){
      throw Error("Usage of non-objects with keylength filter!!")
    }
    return Object.keys(input).length;
  }
});

및 실행:-

{{ stations | keylength }}

데모

함수를 사용하여 객체 속성 수를 결정합니다.

$scope.keyLength = function (obj) {
    return Object.keys(obj).length;
}

및 용도:

{{ keyLength(myObj) }}

필터가 가장 각진 것 같아요.템플릿 코드에서 구조를 처리하는 JS 방법:

angular.module('app.filters').filter('objectKeysLength', [function() {
    return function(items) {
        return Object.keys(items).length;
    };
}]);

angular.module('app.filters').filter('objectKeys', [function() {
    return function(item) {
        if (!item) return null;
        var keys = Object.keys(item);
        keys.sort();
        return keys;
    };
}]);

각도 2 이상의 용액을 찾는 경우.이제 객체 위에 상호 작용하는 데 사용할 수 있는 값 파이프를 사용합니다.

AngularJS 1.6에서 작업하기 위한 다른 답변을 얻을 수 없었습니다.어떤 점이 도움이 됐는지$window접근하다Object.keys이것처럼.$window.Object.keys({ 'a': 1, 'b': 2 })

여기 나에게 효과가 있었던 솔루션이 있습니다.

export class xyzcomponent{
    Key = Object.keys;
}

컴포넌트 html 파일에서는 다음과 같은 것을 사용할 수 있습니다.

<li *ngFor="let i of Key(stations)">.........</li>

언급URL : https://stackoverflow.com/questions/25299436/unable-to-call-object-keys-in-angularjs

반응형