IT

Angular에서 HTML로 모듈의 상수에 직접 액세스하는 방법JS

itgroup 2023. 3. 9. 21:59
반응형

Angular에서 HTML로 모듈의 상수에 직접 액세스하는 방법JS

몇 개의 상수를 html로 직접 사용하고 싶다(컨트롤러에서는 몇 번).

예를 들어, 이것은 메인 앱 모듈입니다.

angular.module('website', [])
.constant('ROUTES', (function () {
    return {
        SIGN_IN: '/sign/in'
  }
})())
.config([..., 'ROUTES', function(..., ROUTES {
    $routeProvider.when(ROUTES.SIGN_IN, {templateUrl: 'pages/sign_in.html', controller:     'SignInController'});
}]);

컨트롤러의 상수를 사용하는 방법은 명확합니다.

하지만 어떻게 하면 이런 일을 할 수 있을까요?

<html ng-app="website"> 
<body>
<a href="{{ROUTES.SIGN_IN}}">Sign in</a>
</body>
</html>

포인트는 모든 루트를 한 곳에 유지하는 것입니다.그럼 내가 이걸 할 수 있을까, 아니면 내가 잘못 선택한 걸까?

IMHO는 $rootScope In html을 사용하여 $rootScope에서 모든 스코프가 $rootScope에서 상속되므로 현재 스코프 angular에 변수가 없는 경우 $rootScope에서 선언된 변수를 사용합니다.

실행 "단계"에서 초기화하는 것이 좋습니다.

angular.module('myApp')
  .run(function ($rootScope) {
      $rootScope.ROUTES = ROUTES
   });

 

다른 답변과 약간 비슷하지만 IMO 클리너:

angular.module('website')
    .constant("ROUTES", {
        SIGN_IN: "/sign/in"
    })
    .run(function ($rootScope, ROUTES) {
        $rootScope.ROUTES = ROUTES;
    });

그리고:

<a href="{{ROUTES.SIGN_IN}}">Sign in</a>

HTH

$rootScope 접근법도 좋지만 상황에 따라서는 필터를 사용한 적이 있습니다.

간단한 예로 BuildVersion이라는 속성을 가진 객체로 정의된 상수 CONFIG가 있다고 가정합니다.다음과 같은 필터를 만들 수 있습니다.

angular.module('myApp')
  .filter('interpolate', ['CONFIG', function (CONFIG) {
      return function (text) {
          return String(text).replace(/\%VERSION\%/mg, CONFIG.BuildVersion);
      };  
  }]);

HTML에서 다음을 수행합니다.

<html ng-app="website"> 
    <body>
        <div>{{'%VERSION%' | interpolate}}</div>
    </body>
</html>

또는

<html ng-app="website"> 
    <body>
        <div>{{'bla bla bla %VERSION%.' | interpolate}}</div>
    </body>
</html>

또한 ROR과 마찬가지로 도우미를 사용할 수 있습니다.

https://gist.github.com/merqlove/491023bcdd2145eef169#file-readme-md

언급URL : https://stackoverflow.com/questions/17505138/how-to-directly-access-modules-constant-in-html-on-angularjs

반응형