>  Q&A  >  본문

angular.js - angularjs ui-router 动态切换视图到指定的ui-view中

a.html

<p ui-view='index'></p>

b.html

<p ui-view='content'></p>

c.html

<p>content1</p>

d.html

<p>content2</p>

a.html中绑定事件触发content视图切换到c.html或d.html

$stateProvider的config应该怎么配置
js里如果手动做切换?

phpcn_u1582phpcn_u15822735일 전768

모든 응답(2)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-05-15 16:51:32

    귀하의 질문에는 필요한 문맥 정보가 부족하여 추측이나 추측에만 의존하여 답변을 완료할 수 있습니다

    모든 SPA 프레임워크의 라우팅 시스템은 동일합니다. 각 경로는 애플리케이션 상태에 해당하며 애플리케이션 상태의 변경 사항은 URL 변경 사항에 반영됩니다. 반대로 URL이 변경되면 라우팅 시스템이 애플리케이션을 동적으로 새로 고칩니다. 프로그램의 상태입니다.

    귀하의 예에서 경로 항목에는 상수 ui-view='content'만 있지만 다른 보기(c.htmld .html<)가 필요합니다. /code>)는 이를 동적으로 입력합니다. 이는 c.htmld.html이 애플리케이션의 서로 다른 상태에 대응해야 라우팅 시스템이 동적으로 입력할 수 있음을 의미합니다. 업데이트되었습니다. ui-view='content',但却要不同的视图(c.htmld.html)动态的进入其中,这就意味着 c.htmld.html 要对应应用程序的不同状态,路由系统才可以据此而动态的更新。

    假设你的例子是这样的:

    • /posts/show/c 的时候,ui-view='content' 显示 c.html

    • /posts/show/d 的时候,ui-view='content' 显示 d.html

    于是我们才可以对应到 ui-router 里面:

    • stateposts.show

    • 动态片段,即 URLs 中可变的部分,对应 state 里的 url,我把它命名为 :name

    • view 的入口是 content@posts.show

    这样便足以写出绝大部分代码了:

    angular.module('YourApp').config(function ($stateProvider) {
    
        $stateProvider.state('posts.show', {
            url: '/show/:name',
            views: {
                'content@posts.show': {
                    templateUrl: /* TODO */,
                    controller: ...
                }
            }
        });
    
    });

    唯一剩下的问题是:当 :name 变化的时候,如何更新 templateUrl

    之前说过的,URLs 的变化会引发路由系统更新应用程序的状态,这些变化在路由系统中被保存在 $params 对象中,我们可以用该对象提取变化的部分并生成正确的 templateUrl。在这里我写一个助手函数来做这件事情:

    angular.module('YourApp').config(function ($stateProvider) {
    
        $stateProvider.state('posts.show', {
            url: '/show/:name',
            views: {
                'content@posts.show': {
                    templateUrl: getTemplateUrl,
                    controller: ...
                }
            }
        });
    
        function getTemplateUrl() {
            return: 'templates/posts/' + $params.name + '.html';
        }
    
    });

    ui-router 这个模块,templateUrl 不只是接收字符串,也可以接收函数的返回值。于是你可以得到:

    • /posts/show/c 的时候,templateUrltemplates/posts/c.html

    • /posts/show/d 的时候,templateUrltemplates/posts/d.html

    相应的,在你 index 里的导航链接就要负责切换 /posts/show/:name

    예제가 다음과 같다고 가정해 보세요: 🎜
    • 🎜/posts/show/c일 때 ui-view='content'c.html를 표시합니다🎜
    • 🎜/posts/show/d일 때 ui-view='content'd.html를 표시합니다🎜
    🎜그래서 ui-router에 대응할 수 있습니다: 🎜
    • 🎜상태posts.show🎜
    • 입니다.
    • 🎜동적 조각, 즉 URL의 변수 부분은 상태url에 해당합니다. 저는 이름을 :name🎜 <으로 지정했습니다. /li>
    • 🎜view 입구는 content@posts.show🎜
    • 입니다
    🎜이것은 대부분의 코드를 작성하기에 충분합니다:🎜 으아아아 🎜남은 유일한 질문은 :name이 변경될 때 templateUrl을 업데이트하는 방법입니다. 🎜 🎜앞서 언급했듯이 URL이 변경되면 라우팅 시스템이 애플리케이션의 상태를 업데이트하게 됩니다. 이러한 변경 사항은 라우팅 시스템의 $params 개체에 저장됩니다. 부분을 ​​변경하고 올바른 templateUrl을 생성하세요. 여기에 이를 수행하는 도우미 함수를 작성합니다. 🎜 으아아아 🎜ui-router 이 모듈인 templateUrl은 문자열뿐만 아니라 함수의 반환 값도 수신합니다. 따라서 다음을 얻을 수 있습니다: 🎜
    • 🎜/posts/show/c일 때 templateUrltemplates/posts/c.html🎜
    • 입니다.
    • 🎜/posts/show/d일 때 templateUrltemplates/posts/d.html🎜
    • 입니다.
    🎜따라서 index의 탐색 링크는 /posts/show/:name의 변경 사항을 전환하는 역할을 합니다. UI에서 동적 조각에 해당하는 링크를 생성하는 방법입니다. -router 문서에 있으니 직접 찾아보세요. 🎜

    회신하다
    0
  • phpcn_u1582

    phpcn_u15822017-05-15 16:51:32

    위 사람들이 게임을 너무 복잡하게 만드는 것 같아요. 그냥 UI 보기 튜토리얼을 보는 게 좋지 않을까요
    https://scotch.io/tutorials/a...

    회신하다
    0
  • 취소회신하다