我是新來的angularjs,並嘗試使用ui-router作爲搜索頁面。代碼如下Angular-ui-router state.transitionTo無法在控制器功能外工作
<!DOCTYPE html>
<html ng-app='test'>
<head>
<meta charset='utf-8'>
<script src='angular.min.js'></script>
<script src='angular-ui-router.min.js'></script>
</head>
<body>
<nav>
<a ui-sref='home'>Home</a>
<a ui-sref='search'>Search</a>
</nav>
<div ui-view></div>
和腳本
<script>
var globals = {};
var app = angular.module('test', ['ui.router'])
app.config(['$stateProvider', '$urlRouterProvider', function (state, route) {
route.otherwise('/');
state.state('home', {
url: '/',
template: '<h1>Home</h1>',
controller: [function() {}]
}).state('search', {
url: '/search/:s',
controller: ['$state', function (state) {
globals.state = state;
trans('xyz'); // test, and this is working, when click "Search" first time
}],
// want to transition when input changed & blur, but the hash tag remains "xyz"
template: '<h1>Search</h1><input onchange="trans(this.value)">'
});
}]);
function trans(x) {
globals.state.transitionTo('search', {s: x});
console.log('Transition to', x);
}
</script>
我重寫input
的onchange
並期望$state.transitionTo
被稱爲從而哈希標籤將被改變,當用戶輸入的東西和模糊。確實被稱爲transitionTo
,但狀態保持不變。
我也嘗試在控制檯中輸入globals.state.transitionTo('home')
,但沒有任何反應。
那麼$state
在控制器功能之外會變得無效嗎?什麼是正確的方法來做到這一點?
感謝您的幫助。
啓蒙!非常感謝。有一點缺陷是每次按鍵都會使輸入失去焦點。可以通過將參數'{notify:false}'添加到'transitionTo'來解決。 – neuront