我一直在尝试将 php 变量的值传递给 JavaScript。当 js 代码放在同一个 php 视图文件中时,我可以做到这一点。但我不想将 js 代码放在 php 中,因为调试或进一步开发变得非常乏味。
$this->registerJsFile('/js/myJs.js', [JqueryAsset::className()]);
请帮忙。
对于从 php 到 js 的传递变量,您可以使用
Yii::$app->view->registerJs('var max = "'. $maxMinCost['max'].'"', \yii\web\View::POS_HEAD);
另一种选择(与使用 传递数据相比registerJs
)是为您的 HTML 元素添加一些data
属性。当某个元素代表某个对应的事物时,这通常是有意义的。例子:
<table>
<?php foreach($items as $item) { ?>
<tr data-item-id="<?= $item->id ?>">
<td>something...</td>
</tr>
<?php } ?>
</table>
然后您可以将 JS 代码放在单独的(未生成的)文件中。
一些data
属性和用法的文档可以在MDN中找到。
从 2.0.14 版开始,有 registerJsVar() 可用。
$this->registerJsVar ('modalTitle', Yii::t('app', 'Update details' ), View::POS_BEGIN);
在使用外部 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);
位置常量用于确保 JS 变量,如上例中的“key”在外部脚本之前定义。
还有其他方法可以将 PHP 变量传递给外部 JS 脚本,例如 Ajax。请参阅“如何将变量和数据从 PHP 传递到 JavaScript? ”以获得更多详细信息。