在AngularJS UI-Router中动态更改视图

约书亚·奥哈娜(Joshua Ohana)

我的应用程序中包含一个包含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

我尝试了以下解决方案,但均无效果:

  1. 将currentView更改为getter函数getCurrentView(),该函数返回currentView。行为相同。
  2. 将currentView setter包装在$ scope。$ apply中。取得$ apply已经在执行中的错误
  3. 在$ timeout中包装currentView setter。行为相同

更新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
});
约书亚·奥哈娜(Joshua Ohana)

因此,我通过仅使每个演练页面成为其父演练的继承状态(每个视图都具有单个视图)来解决此问题。可能不是最好的方法,但是我不想在此上浪费更多时间。

我仍然会喜欢只使用嵌套视图并以这种方式导航的方法,因为将来使用该方法添加更多内容而不会膨胀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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用ui-router在angularjs中动态更改视图

来自分类Dev

AngularJS UI-Router默认视图

来自分类Dev

angularjs-ui-router多个嵌套视图

来自分类Dev

AngularJS ui-router 不渲染视图

来自分类Dev

[AngularJS] [UI-Router]在视图中显示视图

来自分类Dev

AngularJS:ui.router中的多个解析

来自分类Dev

UI视图未在AngularJS教程中呈现

来自分类Dev

在ui-select angularjs中更改范围时无法更改视图

来自分类Dev

获取嵌套视图以使用 AngularJS 和 ui-router 中的多个模块

来自分类Dev

为多个状态AngularJS ui.router设置默认视图

来自分类Dev

AngularJS UI-Router从视图中获取当前状态

来自分类Dev

AngularJS-使用UI-Router的动态路由

来自分类Dev

AngularJS-UI路由器-如何配置动态视图

来自分类Dev

在AngularJs中使用UI-Router更改导航菜单

来自分类Dev

AngularJS / UI-Router从选择/选项更改状态

来自分类Dev

AngularJS 1 ui-router 忽略哈希触发的 url 更改

来自分类Dev

在AngularJS中使用ui.router,Grunt网络服务器似乎不监视视图更改吗?

来自分类Dev

继续之前的angularjs ui-router授权

来自分类Dev

在angularjs中使用ui-router

来自分类Dev

在angularjs ui-router中提交表单

来自分类Dev

测试angularjs ui-router go()方法

来自分类Dev

angularjs-ui.router兄弟状态

来自分类Dev

AngularJS UI-Router多个页面

来自分类Dev

防止angularjs ui-router路由

来自分类Dev

AngularJS ui-router表单提交

来自分类Dev

AngularJs ui-router任务完成

来自分类Dev

angularjs-ui.router兄弟状态

来自分类Dev

AngularJS:ui.router不显示模板

来自分类Dev

ui-router可以在AngularJS中处理多个参数吗?