我试图了解将 refs 与 TypeScript 和 Options API 一起使用的最佳方式。在文档中,他们像下面一样引用它,但没有使用 TS。当谈到 TS 时,他们只解释了如何使用 Composition API。
当我使用this.$refs.myRef它时会抛出此错误Object is of type 'unknown'.
我知道我可以像这样投射和使用它:(this.$refs.myRef as HTMLElement)但我觉得没有必要每次都对每个裁判都这样做。
使用 Options API + TS 引用的正确方法是什么?
我正在尝试在 Vuex Store 模块中使用 Vue.js 插件。
在一个组件,我可以这样称呼它:this.$plugin()。但是,在一个模块中,this没有设置。我想Vue.$plugin()会的工作,因为我初始化插件Vue.use(plugin)和Vue公司是一个全局变量,但事实并非如此。
如何从模块中引用插件?
当我使用浏览器字段输入URL时,参数将转换为字符串,而不是整数,例如/user/1return {id: "1"}。但是,当使用时this.$route.push({}),参数正确地转换为integer {id: 1}。
这是故意行为吗?如果没有,我该如何解决?
我正在使用 JWT 令牌身份验证系统,当我登录时,我得到这样的令牌:
axios.post('/login', data)
.then(response => {
localStorage.setItem('token', response.data.token);
});
Run Code Online (Sandbox Code Playgroud)
这很有效,并且令牌保存在 localStorage 中。但是,令牌不包含在以后的请求中。在授权报头是Bearer null。
这就是我设置全局 axios 对象的方式。
window.axios = axios.create({
baseURL: '/api/',
timeout: 10000,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': document.head.querySelector('meta[name="csrf-token"]').content,
'Authorization': 'Bearer ' + localStorage.getItem('token')
}
});
Run Code Online (Sandbox Code Playgroud)
如果我刷新站点,则会设置令牌并正确使用。
编辑:
我通过Authorization从create()方法中删除标题并使用window.axios.defaults.headers.common['Authorization']. 但是现在Laravel Echo出现了同样的问题。我创建这样的实例:
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'xxx',
cluster: 'eu',
encrypted: true,
namespace: 'xxx',
auth: {
headers: {
'Authorization': 'Bearer ' + localStorage.getItem('token') …Run Code Online (Sandbox Code Playgroud) 每当我的计算机休眠时,Homestead 环境中的时间就会不同步。时间不会在它醒来时更新,它只是从计算机开始睡眠时开始继续。这迫使我摧毁,然后上升 Vagrant。
版本:
我已将此添加到Vagrantfile:
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.provider 'virtualbox' do |vb|
vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 10000 ]
end
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
end
// More code...
Run Code Online (Sandbox Code Playgroud)
如何让 Homestead 环境同步时间?
我如何使用whenLoaded()进行比一级更深的关系?似乎只能whenLoaded像这样使用第一个关系深度:
'season' => $this->whenLoaded('origin', function () {
return new SeasonResource($this->origin->season);
}),
Run Code Online (Sandbox Code Playgroud)
但是,如果Laravel origin加载了(如果未加载),那么seasonLaravel将会加载它,这会导致N + 1问题。这两个origin和season的关系是有条件的,而且并不总是使用。因此,我想使用这样的东西:
$this->whenLoaded('origin.season', ...)
Run Code Online (Sandbox Code Playgroud)
或这个:
'season' => $this->whenLoaded('origin', function () {
return new SeasonResource($this->origin->whenLoaded('season'));
}),
Run Code Online (Sandbox Code Playgroud)
这些都不起作用。我想更深层次的关系不存储在模型本身上,在第二种情况下,whenLoaded()查询生成器上不存在。
我如何使用whenLoaded()进行比一级更深的关系?
如何将自定义参数发送到axios拦截器?我正在使用这样的拦截器:
window.axios.interceptors.request.use(function (config) {
if (PASSED_PARAM == true) {
doSomethingAwesome();
}
return config;
}, function (error) {
return Promise.reject(error);
});
Run Code Online (Sandbox Code Playgroud)
我也有一个响应拦截器,需要接收相同的参数。
创建新模型时,我尝试使用optional()帮助程序在设置值时分配值。但是,如果user未在此上下文中设置对象,则会收到此错误:"Undefined property: stdClass::$user"
$this->events()->create([
'category_a' => optional($event)->categoryA,
'category_b' => optional($event)->categoryB,
'user' => optional($event->user)->accountId,
]);
Run Code Online (Sandbox Code Playgroud)
为了明确起见,$event始终设置了,但是可以包含不同的值。有时category_a设置,有时category_b设置。可选的帮助程序似乎可以解决问题。但是,当对象深于一个层次时,它将引发错误。
那么,如何optional使用一个以上级别的对象正确地与助手一起工作?
Youtube的IFrame API不再适用于我.双方onYouTubeIframeAPIReady()并onYouTubePlayerReady()得到执行.但是,当尝试加载/播放视频时,我收到以下错误:
base.js:2575 Uncaught TypeError: Cannot read property 'g' of null
at jL (base.js:2575)
at nL (base.js:2567)
at PU.g.h.nh (base.js:5853)
at E0 (base.js:3841)
at q1.g.h.Lr (base.js:6904)
at q1.g.h.Dy (base.js:6905)
at r1 (base.js:3909)
at L1.g.h.Vn (base.js:6937)
at L1.g.h.nN (base.js:6679)
at g.bD.g.h.V (base.js:5529)
Run Code Online (Sandbox Code Playgroud)
以下是我使用IFrame API的方法
// Load YouTube Player
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// Create YouTube Player
var jukeBoxYoutubePlayer;
function onYouTubeIframeAPIReady() {
console.log("iframe api ready");
jukeBoxYoutubePlayer = new YT.Player('youtube_player', …Run Code Online (Sandbox Code Playgroud) 我正在使用laravel-comment来让用户互相评论.因此,我需要同时使用Commentable和CanComment特性.但是当我一起使用它们时,我得到一个错误.
用户使用它如下:
use Commentable, CanComment {
Commentable::comments insteadof CanComment;
}
Run Code Online (Sandbox Code Playgroud)
而我正在尝试这样的评论:
foreach (User::all() as $user) {
$receiver = User::where('id', '!=', $user->id)->inRandomOrder()->get();
$user->comment($receiver, $faker->text(100), 3);
}
Run Code Online (Sandbox Code Playgroud)
即使CanComment特性有一个调用的方法getCanBeRated,但我得到一个错误,说它没有.为什么会这样?
我是第一次用 Vue 构建 SPA。我将重用几个功能,但似乎无法使其工作。我收到错误"this.ExperienceToLevel is not a function"。
同时,我什至不确定创建插件是实现我想要的目标的最佳方式。也就是说,让一些函数成为全局的“Vue 方式”。我不希望把它分配给窗口一样window.UserLevel = new UserLevel()。
用户级别.js
/*
Create Levels array
*/
let Levels = [];
for (let i = 0; i < 100; i++) {
let xp = Math.floor(Math.pow(i, 1.3) * 100);
Levels.push(xp);
}
/*
Create UserLevel Plugin
*/
const UserLevel = {
install(Vue, options) {
Vue.ExperienceToLevel = function (xp) {
for (const [level, levelXP] of Object.entries(options.levels)) {
if (levelXP > xp) {
return …Run Code Online (Sandbox Code Playgroud) 有没有办法在数组中给出一个特定的索引值。在 PHP 中,我可以这样做 $arr[index] = val;
现在,我用
Array.prototype.insert = function (index, item) {
this.splice(index, 0, item);
};
Run Code Online (Sandbox Code Playgroud)
和
var mute = [];
mute.insert(index, 'value');
Run Code Online (Sandbox Code Playgroud)
但是,如果数组为空,则索引仍为 0。如何获得正确的索引?
javascript ×5
vue.js ×4
laravel ×3
php ×3
axios ×2
arrays ×1
homestead ×1
push ×1
traits ×1
vagrant ×1
virtualbox ×1
vue-router ×1
vuex ×1
youtube-api ×1