Ser*_*lov 45 javascript angularjs
我想在html中直接使用少量常量,在控制器中几次使用.
例如,这是主要的app模块:
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'});
}]);
Run Code Online (Sandbox Code Playgroud)
所以这很清楚,如何使用来自控制器的常量.
但我怎么能做这样的事情:
<html ng-app="website">
<body>
<a href="{{ROUTES.SIGN_IN}}">Sign in</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
关键是要将所有路线保持在一个地方.那么,我可以这样做,还是我可能选错了方式?
Fab*_*nte 78
恕我直言更好的方法是使用$ rootScope 在html中,每个作用域都继承自$ rootScope,因此如果当前作用域中不存在变量,则使用$ rootScope中声明的变量.
一个好的(恕我直言)方法是在运行 "阶段" 初始化它
angular.module('myApp')
.run(function ($rootScope) {
$rootScope.ROUTES = ROUTES
});
Run Code Online (Sandbox Code Playgroud)
Nim*_*imo 17
与其他答案略有相似但IMO清洁剂:
angular.module('website')
.constant("ROUTES", {
SIGN_IN: "/sign/in"
})
.run(function ($rootScope, ROUTES) {
$rootScope.ROUTES = ROUTES;
});
Run Code Online (Sandbox Code Playgroud)
和:
<a href="{{ROUTES.SIGN_IN}}">Sign in</a>
Run Code Online (Sandbox Code Playgroud)
HTH
小智 16
我也喜欢$ rootScope方法,但我在某些情况下使用过滤器.
作为一个简化示例,假设有一个常量CONFIG定义为具有名为BuildVersion的属性的对象.你可以创建一个像这样的过滤器:
angular.module('myApp')
.filter('interpolate', ['CONFIG', function (CONFIG) {
return function (text) {
return String(text).replace(/\%VERSION\%/mg, CONFIG.BuildVersion);
};
}]);
Run Code Online (Sandbox Code Playgroud)
在HTML中:
<html ng-app="website">
<body>
<div>{{'%VERSION%' | interpolate}}</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
要么
<html ng-app="website">
<body>
<div>{{'bla bla bla %VERSION%.' | interpolate}}</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35423 次 |
最近记录: |