所以我是相对较新的Angular Dart和Dart,并且我正在尝试创建一个简单的webapp。
当我以前进行PHP开发时,我总是拥有一个配置文件,该文件确定应用程序在什么环境上运行,并决定以不同的方式进行设置。
我试图弄清楚如何在Angular Dart中实现类似的目标。专门作为开始的示例,我想根据加载应用程序的URL设置不同的基本href。当您阅读文档时,它说在开发过程中应该像这样设置基本href:
<script>
// WARNING: DO NOT set the <base href> like this in production!
// Details: https://webdev.dartlang.org/angular/guide/router
(function () {
var m = document.location.pathname.match(/^(\/[-\w]+)+\/web($|\/)/);
document.write('<base href="' + (m ? m[0] : '/') + '" />');
}());
</script>
但要进行分发,应将其设置如下:
<base href="/">
所有这些都必须位于HTML页面的<head>
部分中,因此我想在此处执行某种if语句。我如何在PHP中执行此操作的示例:
<head>
<?php if(DEV) { ?>
// Do the development base href
<?php } else if(PROD) { ?>
// Do the production base href
<?php }?>
</head>
所以我的问题基本上是,目前在Angular Dart中是否可能出现这种情况?
答案 0 :(得分:1)
您无法在Angular的<head>
中进行绑定。
我认为仍然可以使用-D=PROD=...
将“环境”变量传递给应用程序
然后您可以使用const isProd = bool.fromEnvironment('PROD')
(另请参见https://github.com/dart-lang/site-www/issues/404)
然后使用dart:html
来操作DOM。
我已经有一段时间没有在网络上使用它了,我不确定Dart 2是否仍然支持它。
(发现更新https://github.com/dart-lang/build/issues/1053 )
如果'<base href="...">
仅用于Angular路由,那么最好使用
import 'package:angular_router/angular_router.dart';
并添加
ValueProvider<String>.forToken(appBaseHref, '/'),
到Angular提供程序。
我还使用了一个构建脚本,该脚本可以复制
之类的文件cp web/run_config_prod.dart web/run_config.dart
webdev build ...
cp web/run_config_dev/run_config.dart
根据目标环境更改某些设置。