Javascript 角度-动态href-<;a>;vs控制器$window.location.href
所以我有一个简单的页面,用户在输入中输入一个ID,然后点击“Go”按钮。我使用了一个onSubmit函数,它工作得很好。然后,我修改了一些角度代码,使之包含html5,从而能够从URL中删除Javascript 角度-动态href-<;a>;vs控制器$window.location.href,javascript,angularjs,Javascript,Angularjs,所以我有一个简单的页面,用户在输入中输入一个ID,然后点击“Go”按钮。我使用了一个onSubmit函数,它工作得很好。然后,我修改了一些角度代码,使之包含html5,从而能够从URL中删除/#/ search.template.html <div class="row"> <div class="small-12 column header-title"> <h2>{{ svm.title }}</h2><h5>
/#/
search.template.html
<div class="row">
<div class="small-12 column header-title">
<h2>{{ svm.title }}</h2><h5>BETA</h5>
</div>
</div>
<form role="form" ng-submit="svm.onSubmit()">
<div class="row">
<div class="small-12 small-centered columns">
<div class="row collapse postfix-round">
<div class="small-9 columns">
<input ng-model="svm.formData.eventid" class="event-id" type="text" placeholder="Event ID" maxlength="7">
</div>
<div class="small-3 columns">
<button type="submit" class="button postfix event-submit">Go</button>
</div>
<div role="alert" ng-show="svm.formData.formError" class="alert alert-danger event-id-error">{{ svm.formData.formError }}</div>
</div>
</div>
</div>
</form>
(function() {
angular
.module('monitorApp')
.controller('searchCtrl', searchCtrl);
searchCtrl.$inject = ['$window'];
function searchCtrl($window) {
var vm = this;
vm.title = 'Monitor';
vm.formData = {};
vm.onSubmit = function() {
vm.formError = '';
if (!vm.formData.eventid) {
vm.formData.formError = 'Please enter Event ID.';
return false;
} else {
vm.formData.formError = '';
$window.location.href = '/#event/' + vm.formData.eventid;
return false;
}
};
}
})();
因此,您可以在控制器中看到$window.location.href='/event/'+vm.formData.eventid我用来提交事件的代码>。现在,自从添加了“html5Mode(true)”之后,它似乎不仅被破坏了,而且如果它起作用,它会将我发送到服务器端路由,这是不对的。它应该使用角度布线
因此,我在这里试图找到如何不仅修复它,而且如何正确地利用角度路由(而不是服务器端路由)。谢谢你的帮助 改用$location
服务:
function searchCtrl($location) {
var vm = this;
vm.title = 'Monitor';
vm.formData = {};
vm.onSubmit = function() {
vm.formError = '';
if (!vm.formData.eventid) {
vm.formData.formError = 'Please enter Event ID.';
return false;
} else {
vm.formData.formError = '';
$location.path('/event/' + vm.formData.eventid);
return false;
}
};
}
改用$location
服务:
function searchCtrl($location) {
var vm = this;
vm.title = 'Monitor';
vm.formData = {};
vm.onSubmit = function() {
vm.formError = '';
if (!vm.formData.eventid) {
vm.formData.formError = 'Please enter Event ID.';
return false;
} else {
vm.formData.formError = '';
$location.path('/event/' + vm.formData.eventid);
return false;
}
};
}
改用服务;在我的“app.js”中使用的是HTML5模式。我使用的是函数配置($routeProvider,$locationProvider){…
和$locationProvider.html5Mode(true);
如果你是这个意思的话。我想更改URL,即$location.path('/event/+vm.formData.eventid)
。一个更好的选择是使用路由器。您不需要从ng submit
手柄返回任何东西。谢谢您的反馈!我现在已经可以使用了;但是既然您提到使用路由器,我就使用一个:。当(“/event/:eventid”,{templateUrl:'bundles/app_client/event/event.view.html',controller:'eventCtrl',controllerAs:'vm',})
(很抱歉弄脏了)。请改用该服务;在我的“app.js”中使用的是HTML5模式awareIn,函数配置($routeProvider,$locationProvider){…
和$locationProvider.html5Mode(true);
如果你是这个意思的话。我想更改URL,即$location.path('/event/+vm.formData.eventid)
。一个更好的选择是使用路由器。您不需要从ng submit
手柄返回任何东西。谢谢您的反馈!我现在已经可以使用了;但是既然您提到使用路由器,我就使用一个:。当(“/event/:eventid”,{templateUrl:'bundles/app_client/event/event.view.html',controller:'eventCtrl',controllerAs:'vm',})
(很抱歉弄脏了)。太棒了,工作得很好,学到了一些新东西!谢谢!太棒了,工作得很好,学到了一些新东西!谢谢!