从AngularJS 1.0.7升级到1.2.0rc1时收到此错误.
我是Ionic的移动应用程序开发新手.在登录和注销时,我需要重新加载页面,以便刷新数据,然而,$state.go('mainPage')在不重新加载的情况下将用户带回视图 - 从不调用其后面的控制器.
有没有办法在Ionic中清除历史并重新加载状态?
我使用routeProvider为我的网址定义控制器和模板.
当我点击与实际位置具有相同网址的链接时,没有任何反应.reload()如果用户点击这样的链接,即使位置没有改变,我也希望调用该方法.换句话说,如果我将位置设置为相同的值,我希望它的行为与我将其设置为不同的值相同.
有没有办法配置routeProvider或locationProvider自动执行?或者这样做的正确方法是什么?这是往返应用程序中的标准行为,但如何在angularjs中执行此操作?
我也在谷歌小组上问过它.
更新:
这个问题得到了很多观点,所以我将尝试解释我是如何解决我的问题的.
我在评论中建议Renan Tomal Fernandes建议我在我的应用程序中链接的自定义指令.
angular.module('core.directives').directive('diHref', ['$location', '$route',
function($location, $route) {
return function(scope, element, attrs) {
scope.$watch('diHref', function() {
if(attrs.diHref) {
element.attr('href', attrs.diHref);
element.bind('click', function(event) {
scope.$apply(function(){
if($location.path() == attrs.diHref) $route.reload();
});
});
}
});
}
}]);
Run Code Online (Sandbox Code Playgroud)
然后该指令用于我想要具有此功能的应用程序中的所有链接.
<a di-href="/home/">Home</a>
Run Code Online (Sandbox Code Playgroud)
该指令的作用是它根据href属性为您设置属性,di-href因此angular可以像往常一样处理它,当您将鼠标悬停在链接上时可以看到该URL.此外,当用户点击它并且链接的路径与当前路径相同时,它会重新加载路径.
We are new to AngularJS but are working on an AngularJS/Web API application that updates a data model from an AngularJS Bootstrap popover/directive.
We've successfully updated the database from the directive/popover, however are having trouble figuring out how to refresh the data on the page with the updated data without reloading the page.
Main Page CSHTML:
<div ng-app="FFPA" ng-controller="myCtrl">
<div svg-floorplan="dataset"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
Popover HTML:
<div>
<div>
ID: {{ person.Id }}<br />
Name: {{ person.fullName }}<br />
Current Cube/Office: {{ …Run Code Online (Sandbox Code Playgroud) asp.net-web-api angularjs angularjs-directive angularjs-scope angular-bootstrap
是我的$ stateProvider:
$stateProvider
.state('home', {
url : '/',
templateUrl : '/admindesktop/templates/main/',
controller : 'AdminDesktopMainController'
}).state('company', {
url : '/company',
templateUrl : '/admindesktop/templates/grid/',
controller : 'CompanyGridController'
}).state('company.detail', {
url : '/{id:\d+}', //id is
templateUrl : '/admindesktop/templates/company/detail/',
controller : 'CompanyDetailController'
});
Run Code Online (Sandbox Code Playgroud)
它适用于'公司'状态(我使用ui-sref),但此代码不起作用(从'公司'状态调用):
$state.go('.detail', {
id: $scope.selectedItem.id //selectedItem and id is defined
});
Run Code Online (Sandbox Code Playgroud)
我从StackOverflow上阅读官方文档和答案,但我找不到解决方案.我不能使用ui-sref,我使用ui-grid,并在从表中选择一行进行编辑后打开新状态.
我做错了什么?
我在项目中使用angular-ui的路由器(v0.2.0),我们正在尝试重新加载视图.我试过$state.transitionTo,也$state.go,但也似乎无所不能.有谁知道怎么做重装?
谢谢!
以下是英语的json i18n语言文件示例:
{
"project": {
"SPONSORINFO": {
"MAIN" : "Select the Sponsor Name",
"SPONSORLIST": [
{"spons" :"SponsorName 1" },
{"spons" :"SponsorName 2" }
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的HTML视图:
<div class="form-group" >
<label for="form-field-select-1" translate="project.SPONSORINFO.MAIN">
</label>
<select class="form-control" ng-model="myModel.sponsors">
<option ng-repeat="s in projectJSON.project.SPONSORINFO.SPONSORLIST" value="{{s.spons}}">{{s.spons | translate}}</option>
</select>
</div>
Run Code Online (Sandbox Code Playgroud)
将translate="project.SPONSORINFO.MAIN"在标签被正确地显示值 "选择赞助商名称"只要语言切换点击(无需刷新).
我在视图控制器中使用以下函数来加载基于所选语言的语言文件并将其传递给$scope.projectJSON我,以便我可以ng-repeat在我的html视图中调用它:
var lang = $translate.use();
$http.get('assets/i18n/'+lang+'.json').success(function(data) {
$scope.projectJSON= data;
});
Run Code Online (Sandbox Code Playgroud)
问题是切换语言后,下拉菜单不会更改为所选语言,除非我刷新或更改视图并返回.如何解决此问题以使其像标签一样工作?
我的main.js中的翻译全局配置如下:
app.config(['$translateProvider',
function ($translateProvider) { …Run Code Online (Sandbox Code Playgroud) javascript jquery angularjs angularjs-ng-repeat angular-translate
我有一个应用程序设置有2个状态,A和AB这样做:
$stateProvider.state('A', {
url: "/A/{aId}",
controller: 'AController',
templateUrl: function($stateParams) {
return "/A/" + $stateParams.aId + "/layout";
}
}).state('A.B', {
url: "/B/{bId}",
controller: 'BController',
templateUrl: function($stateParams) {
return "/A/" + $stateParams.aId + "/B/" + $stateParams.bId+ "/layout";
}
});
Run Code Online (Sandbox Code Playgroud)
当我处于AB状态时(url会像#/ A/12/B/123那样)并使用浏览器的后退按钮返回或者转换为url更改,状态AB被清除但是状态A没有渲染回来.据我所知,控制器没有被触发.
因此,如果我在A/12/B/123并且回到A/12没有任何反应,但如果我回到A/13(使用transitionTo)它会渲染.
在angular-ui-router项目的示例应用程序中,这种情况很好,所以我认为我的设置可能有问题.我认为值得一提的是,在index.html上,我有一个ui-view,其中包含状态A,而状态A的模板具有另一个ui-view,用于加载状态AB
如果有人可以提供帮助,我会非常感激
我有一个名为newGroupCtrl的控制器,其定义如下:
.state('new_group', {
url: '/new_group',
templateUrl: 'templates/new_group.html',
controller: 'newGroupCtrl'
})
.controller('newGroupCtrl', function ($scope, $rootScope,$ionicHistory,$window) {
$rootScope.roomId = $scope.getRoom();
$scope.getRoom = function () {
var date = new Date;
var minutes = date.getMinutes();
var hour = date.getHours();
return 'room_' + hour + '' + minutes;
};
}
Run Code Online (Sandbox Code Playgroud)
我从上一页到达这个控制器:
$window.location.href = ('#/new_group');
Run Code Online (Sandbox Code Playgroud)
直到现在这都很好.$rootScope.roomId变量在newGroupCtrl控制器中正确初始化.
从这个new_group页面,我导航到另一个页面.当我通过调用导航回这个页面时 $window.location.href = ('#/new_group');,
$rootScope.roomId没有再次初始化,而是它的旧值仍然存在.newGroupCtrl的状态被保留.
如何完全重新初始化newGroupCtrl?
我的问题是,如果你处于相同的状态,我们可以在ui-router中重新加载视图.检查我的代码在http://plnkr.co/edit/MA7CuyH2RFrlaoAgBYog?p=preview
我的app.js文件是
var app = angular.module('plunker', ['ui.router']);
app.config(function($stateProvider) {
$stateProvider
.state("view1", {
url: "/view1",
templateUrl: "x.html"
})
.state("view2", {
url: "/view2",
templateUrl: "y.html"
})
})
app.controller("MainCtrl",function(){});
Run Code Online (Sandbox Code Playgroud)
而索引页是
<body ng-controller="MainCtrl">
<a href="#/view1">Accounts</a>
<a href="#/view2">Dashboard</a>
<div ui-view></div>
Run Code Online (Sandbox Code Playgroud)
现在点击仪表板链接,您将看到一个文本框.填写任何值.现在再次单击Dashboard链接.现在状态应该重新加载,并且应该重新加载页面的所有数据,包括其控制器.请确保只使用ui-router.
谢谢
如何配置UI路由器默认重新进入或重新加载状态?
例如,用户想要刷新页面,因此他单击该页面后面的链接.但目前该链接不可点击,因为它转到同一页面并且状态不会改变.使用浏览器按钮刷新确实有效,因此它会重新加载整个SPA - 这是不可取的.
这个问题 - 重新加载当前状态 - 刷新数据 - 描述了类似的效果.是否可以更改此解决方案 - /sf/answers/1623912041/ - 以定义默认行为?
顺便说一句,可能我的方法是不正确的,我在UI路由器中缺少一些基本的想法.请指出是否是这种情况.
在桌面上,您可以使用location.reload();它,它会重新加载页面,重新启动上面的代码。
但是如果我想“重新加载”一个 javascript 应用程序怎么办?有没有办法这样做?谢谢!
location.reload();
// Page reloads on desktop, app does nothing on mobile
Run Code Online (Sandbox Code Playgroud)