写好的路由是(关键是/Drawing/:id那个)

export default new Router({
    mode:'history',
    routes: [
        { path: '/', name: 'home', component:  App},
        { path: '/hello', name: 'Main', component: Hello },
        { path: '/Drawing/:id',name:'drawing',component:Drawing}
    ]
})

会把所有的/Drawing/1 或/Drawing/2都导向一个界面

然后对应的Drawing组件里直接用$route.params.id 就能拿到链接后的Id,

但是router-link这里比较发愁,要怎么生成一个链接
上网搜了一下, 咳咳原来直接..按js写就好 字符串 + 变量 没毛病!记得to前面的冒号
<router-link :to="'/test/'+id">

参考:https://blog.csdn.net/sangjinchao/article/details/70888259

最近想要在vue cli创建的项目里使用vue router,感觉一切正常结果却报错

原来是因为 在vue里面直接使用必须要用router这个名字

例如:

import router from './routes.js'

const app = new Vue({
  el: '#app',
  router,
  render: h => h(App)
})

如果你真的想起其他的名字也可以:

import routes from './routes.js'

const app = new Vue({
  el: '#app',
  router: routes,
  render: h => h(App)
})

所以这又是一个坑

参考: https://stackoverflow.com/questions/44618761/vue-router-error-typeerror-cannot-read-property-matched-of-undefined

Typecho 很轻便而且加载速度比wordpress快很多, 所以最后还是迁移了,

有几点需要注意

  1. 将/wp-content/uploads/放到Typecho的 /usr/uploads(图片和附件之类的),
    然后在typecho数据库执行查询
UPDATE typecho_contents SET text = REPLACE(text,'https://你的博客域名/wp-content/uploads/','https://你的博客域名/usr/uploads/');
  1. 安装wordpress to typecho插件, 中间可能会出错,一般是wordpress里的草稿有问题,删掉这些未发布的草稿, 重新开始转换就行,插件会跳过前面重复的文章,不用担心重复导入
  2. 永久链接的转换, 将现在的链接格式改为wordpress的, 在设置-永久链接 里面使用自定义即可

官方文档:

https://docs.microsoft.com/en-us/visualstudio/install/create-an-offline-installation-of-visual-studio?view=vs-2019

关于C# .Net Desktop 的流程大概就是

下载vs community版本

https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=community&rel=16&utm_medium=microsoft&utm_source=docs.microsoft.com&utm_campaign=offline+install&utm_content=download+vs2019

下载文件到相应文件夹

桌面.Net Desktop

vs_community.exe --layout c:\vslayout --add Microsoft.VisualStudio.Workload.ManagedDesktop --includeOptional --lang en-US

开始安装

c:\vslayout\vs_community.exe --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Component.GitHub.VisualStudio --includeOptional

完成

这样我们就完成了程序的离线安装,通常在在线安装无法连接时比较方便
(博文中去掉了原来的.Net web)

前言

阅读本文你需要:
基础的java知识 √
基础Android知识

教程思路

我们将创建一个 有 输入框(EditText) 和 按钮(Button) 的界面,
用户在输入框输入文字, 点击按钮后,程序将保存文本,
用户退出程序, 重新打开时依旧有上次输入的内容

让我们开始吧

主程序

创建一个SharedPreferences.

SharedPreferences sharedPreferences = getSharedPreferences("settings", Context.MODE_PRIVATE);

你可以看到我们在后面跟了一个get的方法,
第一个值是要获取的Preferences的名字, 我们随便起一个名字就好, 这里我们写 settings
然后第二个值是模式mode, 这里我们先默认PRIVITE

你的 MainActivity.java 现在应该和下面差不多

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        SharedPreferences sharedPreferences = getSharedPreferences("settings", Context.MODE_PRIVATE);
    }
}

做一个自己的布局文件

我们在我们的主 Activity 的布局里面添加一个 EditText 编辑框, id 为 editText1,
然后在下面增加一个 Button 按钮, id 为 button1,
( 教程使用垂直的LinearLayout )

你的布局文件(/res/layout/activity_main.xml)大概像这样:

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="24dp"
            android:orientation="vertical">

            <EditText
                android:id="@+id/editText1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="textPersonName"
                android:text="" />
            <Button
                android:id="@+id/button1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="保存" />
</LinearLayout>

(善用Android Studio, 可以直接拖动添加部件)

完善主程序代码

接下来,我们需要给按钮增加一个监听事件, 当按钮被点击就能做些事情了,

    Button button_save = (Button)findViewById(R.id.button1);
    button_save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        }
    });

当然我们的IDE会提示,所以直接回车很省力

在onClick里面,我们要输入的就是 让程序获取EditText 文本框里的内容并保存到SharedPreference里的 代码了
写好以后大概就是这样的

    Button button_save = (Button)findViewById(R.id.button1);
    button_save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
               EditText editText=(EditText)findViewById(R.id.editText1);
               String someText=String.valueOf(editText.getText());
               //someText的值就是editText的内容了
               sharedPreferences.edit().putString("text", someText).apply();
               //编辑,放入字符串,应用 ( 学好英语,理解方法的意思哈哈哈 )
        }
    });

接下来我们需要让程序加载时就会显示我们原先保存的字符
所以我们在稍微上面点的位置加入一行,

EditText editText_again=(EditText)findViewById(R.id.editText1);
editText_again.setText(sharedPreferences.getString("text",""));

(因为开始的时候可能没有editText这个变量..所以我们需要再把它找一遍)
然后就能在程序开始的时候取得我们保存的字符,如果没有获取到,就默认为空
现在你的主程序 MainActivity.java 看起来应该像这样:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        SharedPreferences sharedPreferences = getSharedPreferences("settings", Context.MODE_PRIVATE);

        EditText editText_again=(EditText)findViewById(R.id.editText1);
        editText_again.setText(sharedPreferences.getString("text",""));

        Button button_save = (Button)findViewById(R.id.button1);
        button_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                   EditText editText=(EditText)findViewById(R.id.editText1);
                   String someText=String.valueOf(editText.getText());
                   //someText的值就是editText的内容了
                   sharedPreferences.edit().putString("text", someText).apply();
                   //编辑,放入字符串,应用 ( 学好英语,理解方法的意思哈哈哈 )
            }
        });
    }
}

完成

运行程序, 输入文字, 点击保存, 关闭程序
再次打开程序, 会看到我们的文字依旧在那里!
这就是 SharedPreferences 的简单使用了!教程结束!