我的应用程序中包含一个包含4页的演练。我决定使演练成为具有多个视图的单个状态,以表示这四个页面中的每个页面。
在我的html中,我将div定义为指向当前视图的ui视图,然后我的控制器根据需要进行更改。
问题是,当我将$ scope.currentView更新为“ general”时,它不会更改屏幕上实际显示的内容!如果我在_init函数中将其手动更改为“常规”,则确实会显示常规页面,但是无法通过单击按钮进行更改。
HTML:
<div ui-view="{{currentView}}@walkthrough"></div>
控制器:
var _init = function () {
$scope.currentView = 'welcome';
};
_init();
$scope.setView = function (view) {
$scope.currentView = view;
};
我的状态定义:
.state('walkthrough', {
url: '/walkthrough',
views: {
'': {
templateUrl: 'app/walkthrough/walkthrough.html',
controller: 'walkthroughController'
},
'welcome@walkthrough': {
templateUrl: 'app/walkthrough/welcome.html'
},
'general@walkthrough': {
template: 'general'
}
}
})
和更新视图的按钮:
<img class="start-button center-block" ng-click="setView('general')" />
更新1
我尝试了以下解决方案,但均无效果:
更新2
我添加了一个<pre>
部分,该部分调用与ui-view中相同的代码{{currentView}}@walkthrough
。即使页面本身没有更新显示新视图,它也会显示正确的视图。
更新3
我已经尝试过如何以编程方式设置视图的所有组合,但是没有尝试过。无论我是否使用服务器来获取视图,函数,直接使用$ scope变量,什么都没有。变量本身是正确的,但是当我更改变量时,视图不会改变。
奇怪的是,当我在init()函数中设置currentView的值时,它就会工作一次。如果我将值更改为代码本身中的下一个视图($ scope.currentView ='general'<-这将显示常规页面),则它起作用,但是如果我单击按钮,则不会将currentView更改为“ general” 。
我已经尝试过各种$ scope。$ applys,$ digests和$ timeouts。我没有做任何事情都会使视图本身更新。剩下的唯一一件事就是使用ng-show / hide将其划分为一堆div,这确实很丑陋,而且很难管理,也是我首先要使用视图的原因。
更新4
不管我尝试什么,仍然没有任何进展...我认为将变量更改包装到$ timeout中的一些怪异组合可能被证明是有用的,但是,没什么。我最后的想法是将所有这些更改为它们自己的独立状态,但是随后我将得到一堆重复的代码,这显然不好。我在应用程序的其他部分使用了几乎相同类型的更改(尽管更改了状态,而不是视图),并且它运行良好。我无法弄清楚为什么我不能动态更改视图。任何帮助将不胜感激。
更新5
用户在下面的评论后有一些住所,但无处可去。我试图调用所有方式的$ state更改来刷新视图,但没有任何效果。我尝试了以下所有方法,但都没有对页面产生任何影响:
$state.reload();
$state.go($state.current, {}, { reload: true });
$state.transitionTo($state.current, $stateParams, {
reload: true,
inherit: false,
notify: true
});
因此,我通过仅使每个演练页面成为其父演练的继承状态(每个视图都具有单个视图)来解决此问题。可能不是最好的方法,但是我不想在此上浪费更多时间。
我仍然会喜欢只使用嵌套视图并以这种方式导航的方法,因为将来使用该方法添加更多内容而不会膨胀stateProvider会更容易。
.state('walkthrough', {
url: '/walkthrough',
views: {
'': {
templateUrl: 'app/walkthrough/walkthrough.html',
controller: 'walkthroughController'
}
}
})
.state('walkthrough.welcome', {
url: '/welcome',
views: {
'walkthrough.welcome@walkthrough': {
templateUrl: 'app/walkthrough/welcome.html'
}
}
})
.state('walkthrough.general', {
url: '/general',
views: {
'walkthrough.general@walkthrough': {
templateUrl: 'app/walkthrough/general.html'
}
}
})
.state('walkthrough.business', {
url: '/business',
views: {
'walkthrough.business@walkthrough': {
templateUrl: 'app/walkthrough/business.html'
}
}
})
.state('walkthrough.friends', {
url: '/friends',
views: {
'walkthrough.friends@walkthrough': {
templateUrl: 'app/walkthrough/friends.html'
}
}
})
现在,我可以轻松地通过使用
<img ui-sref="walkthrough.general" />
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句