File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 4949 <span >items left</span >
5050 </span >
5151 <ul class =" filters" >
52- <li ><a href =" #/all" class =" selected" >All</a ></li >
53- <li ><a href =" #/active" class =" " >Active</a ></li >
54- <li ><a href =" #/completed" class =" " >Completed</a ></li >
52+ <li >
53+ <!-- 注意动态 class 要用对象,同时别忘记 v-bind 的 : -->
54+ <a href =" #/all" :class =" { selected: filterRef === 'all' }" >All</a >
55+ </li >
56+ <li >
57+ <a href =" #/active" :class =" { selected: filterRef === 'active' }"
58+ >Active</a
59+ >
60+ </li >
61+ <li >
62+ <a
63+ href =" #/completed"
64+ :class =" { selected: filterRef === 'completed' }"
65+ >Completed</a
66+ >
67+ </li >
5568 </ul >
5669 <button class =" clear-completed" style =" display : none " >
5770 Clear completed
6275</template >
6376
6477<script >
65- import { useNewTodo , useTodoList } from " ../compositions" ;
78+ import { useNewTodo , useTodoList , useFilter } from " ../compositions" ;
6679
6780export default {
6881 setup () {
@@ -71,6 +84,7 @@ export default {
7184 // todoRef: todoList.todoRef,
7285 todoRef,
7386 ... useNewTodo (todoRef),
87+ ... useFilter (todoRef),
7488 };
7589 },
7690};
Original file line number Diff line number Diff line change 11export { default as useCount } from './useCount'
22export { default as useNewTodo } from './useNewTodo'
3- export { default as useTodoList } from './useTodoList'
3+ export { default as useTodoList } from './useTodoList'
4+ export { default as useFilter } from './useFilter'
Original file line number Diff line number Diff line change 1+ import { ref , onMounted , onUnmounted } from "vue" ;
2+
3+ const filterEnum = [ "all" , "active" , "completed" ]
4+
5+ export default function useFilter ( todoRef ) {
6+ const filterRef = ref ( "all" )
7+
8+ // 筛选方式响应 与 hash 连接
9+ const onHashChange = ( ) => {
10+ // trim 左边不需要的 #/
11+ const hash = location . hash . replace ( / # \/ ? / , "" ) ;
12+ if ( filterEnum . includes ( hash ) ) {
13+ filterRef . value = hash
14+ } else {
15+ filterRef . value = "all"
16+ location . hash = "" // "" 虽然是无效会第二次走到这分支,但是 "" => "" 不会触发 hashchange
17+ }
18+ }
19+
20+ onMounted ( ( ) => {
21+ window . addEventListener ( "hashchange" , onHashChange )
22+ } )
23+
24+ onUnmounted ( ( ) => {
25+ window . removeEventListener ( "hashchange" , onHashChange )
26+ } )
27+
28+ return {
29+ filterRef
30+ }
31+ }
You can’t perform that action at this time.
0 commit comments