我一直在尝试将php变量的值传递给JavaScript。当js代码放入相同的php视图文件时,我可以这样做。但我不想把js代码放在php中,因为调试或进一步开发变得非常繁琐。
$this->registerJsFile('/js/myJs.js', [JqueryAsset::className()]);
请帮忙。
答案 0 :(得分:6)
对于从php到js的传递变量,你可以使用
Yii::$app->view->registerJs('var max = "'. $maxMinCost['max'].'"', \yii\web\View::POS_HEAD);
答案 1 :(得分:4)
另一个选项(与使用registerJs
传递数据相比)是为HTML元素添加一些data
属性。当某个元素代表某个相应的东西时,这通常是有意义的。例如:
<table>
<?php foreach($items as $item) { ?>
<tr data-item-id="<?= $item->id ?>">
<td>something...</td>
</tr>
<?php } ?>
</table>
然后你可以将JS代码放在一个单独的(未生成的)文件中。
可以在MDN中找到data
属性和用法的一些文档。
答案 2 :(得分:2)
在使用外部JS脚本之前使用内联JS脚本。
$inlineScript = 'var key = ' . $value . ';';
$this->registerJs($inlineScript, View::POS_HEAD, 'my-inline-js');
$this->registerJsFile('/js/myJs.js', [
'depends' => [...],
'position' => View::POS_BEGIN);
The position constants用于确保JS变量,例如&#34; key&#34;在上述情况下,在外部脚本之前定义。
还有其他方法可以将PHP变量传递给外部JS脚本,例如Ajax。请参阅&#34; How to pass variables and data from PHP to JavaScript?&#34;了解更多细节。
答案 3 :(得分:2)
从2.0.14版开始,提供了registerJsVar()。
void main (){
final n1 = 15.00;
final n2 = 15.50;
print(format(n1));
print(format(n2));
}
String format(double n) {
final fraction = n - n.toInt();
if (fraction == 0.0) {
return n.toString();
}
var twoDigitFraction = (fraction * 100).truncateToDouble().toInt();
return '${n.toInt()}.$twoDigitFraction';
}