如何在YII2中将php变量传递给JavaScript外部文件

时间:2014-05-09 09:46:03

标签: php yii2

我一直在尝试将php变量的值传递给JavaScript。当js代码放入相同的php视图文件时,我可以这样做。但我不想把js代码放在php中,因为调试或进一步开发变得非常繁琐。

$this->registerJsFile('/js/myJs.js', [JqueryAsset::className()]);

请帮忙。

4 个答案:

答案 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';
}