Почему loda sh не работает при импорте в Vue. js - PullRequest
0 голосов
/ 23 января 2020

Я создал новую sh новую установку vue. js, используя команду "vue create todo --default". После этого я установил loda sh с помощью этой команды "npm i --save loda sh". Я вижу это в моем пакете. json на объекте "зависимостей". Проблема в том, что, когда я импортирую его на свой main. js и использую функции loda sh, он показывает ошибку «_ не определен». Поэтому я попытался импортировать его внутри приложения. vue. Ошибка «_ не определена» была удалена, но она не работает.

Вот код внутри приложения. vue, main. js и пакета. json

main. js

import Vue from 'vue'
import App from './App.vue'
import "bootstrap/dist/css/bootstrap.min.css";
import "jquery/dist/jquery";
import "bootstrap/dist/js/bootstrap.min";

import _ from "lodash";
Vue.prototype._ = _;

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

Приложение. vue

<template>
    <div id="app">
        <h4 class="bg-primary text-white text-center p-2">
            {{name}}'s' To Do List
        </h4>
        <div class="container-fluid p-4">
            <div class="row">
                <div class="col font-weight-bold">Task</div>
                <div class="col-2 font-weight-bold">Done</div>
            </div>
            <div class="row" v-for="t in completedtask" v-bind:key="t.action">
                <div class="col">{{t.action}}</div>
                <div class="col-2">
                    <input type="checkbox" v-model="t.done" class="form-check-input">
                    {{t.done}}
                </div>
            </div>
        </div>
    </div>
</template>

<script>

export default {
    data(){
        return{
            name: "Welly",
            tasks: [{
                    action: "Buy Flowers",
                    done: false
                },
                {
                    action: "Get Shoes",
                    done: false
                },
                {
                    action: "Collect Tickets",
                    done: true
                },
                {
                    action: "Call Joe",
                    done: false
                }
            ]
        };
    },
    computed: {
        hidecompletedtask(){
            return _.map(this.tasks,(val)=>{
                return !val.done;
            });
        }
    }
}
</script>

<style>
</style>

пакет. json

{
  "name": "todo",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "bootstrap": "^4.4.1",
    "core-js": "^3.4.4",
    "jquery": "^3.4.1",
    "lodash": "^4.17.15",
    "popper.js": "^1.16.1",
    "vue": "^2.6.10"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "^4.1.0",
    "@vue/cli-plugin-eslint": "^4.1.0",
    "@vue/cli-service": "^4.1.0",
    "babel-eslint": "^10.0.3",
    "eslint": "^5.16.0",
    "eslint-plugin-vue": "^5.0.0",
    "vue-template-compiler": "^2.6.10"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential",
      "eslint:recommended"
    ],
    "rules": {},
    "parserOptions": {
      "parser": "babel-eslint"
    }
  },
  "browserslist": [
    "> 1%",
    "last 2 versions"
  ]
}

Ответы [ 3 ]

0 голосов
/ 23 января 2020

Вы также можете использовать пакет vue-lodash - Выполните следующие действия:

  1. npm install --save vue -loda sh
  2. в основном. js - импорт VueLoda sh из 'vue -loda sh'
  3. в основном. js после импорта - Vue .use (VueLoda sh)

Использование:

Vue._.random(20);
this._.random(20);

-------- ИЛИ ----- -------

В вашей главной. js добавьте эту строку кода:

window._ = require('lodash');

Таким образом, он будет работать без Vue или this:

Просто сделай - _.map()

0 голосов
/ 03 февраля 2020

Вы можете импортировать lodash в свой основной файл. js с помощью javascript window object, например:

window._ = require('lodash');

, а затем использовать его в любом месте вашего проекта, например:

var original = [
  { label: 'private', value: 'private@johndoe.com' },
  { label: 'work', value: 'work@johndoe.com' }
];

var update = [
  { label: 'private', value: 'me@johndoe.com' },
  { label: 'school', value: 'schol@johndoe.com' }
];

var result = _.unionBy(update, original);
var sortedresult = _map(_.sortBy(result, 'label'));
console.log(sortedresult);

Я просто использую метод loda sh unionBy и sortBy, например.

0 голосов
/ 23 января 2020

Вам все равно потребуется доступ к прототипу через контекст this, например this._.map().

computed: {
  hidecompletedtask() {
    return this._.map(this.tasks, (val) => {
      return !val.done;
    });
  }
}

Ссылка: Добавление свойств экземпляра .


Кроме того, вы можете расширить глобальный объект window. Вставьте следующую строку в main.js (или в некоторый загрузочный файл).

window._ = require('lodash');

Где-то еще, где вам нужна библиотека:

computed: {
  hidecompletedtask() {
    // The underscore (_) character now refers to the `window._ object`
    // so you can drop the `this`.
    return _.map(this.tasks, (val) => {
      return !val.done;
    });
  }
}
...