[TOC]
## JS动态传参
一般情况下PHP传递参数给JS是如何进行的?
- 数组转化为JSON字符串
- 然后放在标签变量中或者放在script标签中
- 判断数字和字符两者之间也不是很方便
- true和false也需要判断转化
- 也有可能其他意想不到的问题
这里runJs函数已经解决了上述问题,数据传递就是这么简单。
设置文件/html/plugins/tphp/demo/base/view/run/view.js内容如下
```
/**
*
* @param id 自动生成或获取的
* @param arg1 第1个产生
* @param arg2 第2个参数
* @param arg3 第3个参数
* @param arg4 第4个参数
*/
function test_php(id, arg1, arg2, arg3, arg4) {
console.log(id);
console.log(arg1);
console.log(arg2);
console.log(arg3);
console.log(arg4);
}
function my_func(id) {
console.log("my_func ID: " + id);
}
```
设置文件/html/plugins/tphp/demo/html/www/base/run/demo1/tpl.blade.php内容如下
```
@php
/*
组合说明:
如: view.run==tphp.demo#my_id:my_func
1、必须: 存在视图view.run或方法:my_func其中一个
2、可选: 插件指向==tphp.demo和ID设置#my_id
3、view.run必须在前面
以下写法是等效的
1、view.run:my_func==tphp.demo#my_id
2、view.run:my_func#my_id=tphp.demo
3、view.run:my_func#my_id==demo
4、view.run:my_func#my_id
*/
$runJs = $plu->runJs(
// 指向视图文件 base/view/run/view.js
// 默认会调用view.js文件的第一个方法: test_php
// 也可以调用其他插件,比如: view.run==demo 或者 view.run=tphp.demo
"view.run",
// 第1个参数
"hello",
// 第2个参数
true,
// 第3个参数
100,
// 第4个参数
[
"say" => "hello",
"name" => "tphp"
]
);
// 可设置JS传递参数
// $runJs->setArgs("abc", "def");
// 可设置
// $runJs->style("body{color: #F00}")->script("alert()");
@endphp
<div {!! $runJs->getId() !!}></div>
<div>获取ID: {!! $runJs->id !!}</div>
<div {!! $runJs = $plu->runJs(
// 不指向任何视图文件,自动生成ID,调用my_func方法
":my_func"
)->getId()
!!}></div>
<div {!! $runJs = $plu->runJs(
// 不指向任何视图文件,ID设置为my_id,调用my_func方法
// 单独使用#my_id是无效的
// 顺序不固定,:my_func#my_id也是等效的
"#my_id:my_func"
)->getId()
!!}></div>
```
打开网址[http://plu.tphp.com/base/run/demo1](http://plu.tphp.com/base/run/demo1)获得如下效果(查看源码)
控制台

JS源码

## 直接调用视图
设置文件/html/plugins/tphp/demo/base/view/run/html/view.blade.php内容如下
```
@php
/*
用runJs调用时默认会传递3个参数: $runJs, $id, $__id__
$runJs: runJs 生成对象
$id: 标签属性id
$__id__: 纯id
在view()中可传递参数,如: $myData
*/
@endphp
<div {!! $id !!}>{{ $__id__ ~~</div>
<div {!! $runJs->getId() !!}>{{ $runJs->id ~~</div>
<div>{{ $myData ~~</div>
```
设置文件/html/plugins/tphp/demo/base/view/run/html/view.js内容如下
```
function run_html_func(id, arg1) {
console.log(id);
console.log(arg1);
}
```
设置文件/html/plugins/tphp/demo/html/www/base/run/demo2/tpl.blade.php内容如下
```
@php
// 支持 view.run.html==tphp.demo
$runJs = $plu->runJs("view.run.html", "hello TPHP");
// 可以重新设置视图路径
// 不支持 view.run.html==tphp.demo
// $runJs->setViewPath('view.run.html');
$viewData = [
"myData" => "My Data"
];
@endphp
{!! $runJs->view($viewData) !!}
<div>视图路径: {!! $runJs->view(
// 参数传递
$viewData,
// 是否打印错误,默认true
true,
// 是否返回路径,默认false
true
) !!}</div>
```
打开网址[http://plu.tphp.com/base/run/demo2](http://plu.tphp.com/base/run/demo2)获得如下效果(查看源码)
控制台

JS源码
