【问题标题】:url ambiguity causes ui router to instantiate controller twiceurl 歧义导致 ui 路由器两次实例化控制器
【发布时间】:2014-08-12 09:07:17
【问题描述】:

我正在使用下面的状态定义(UI-Router)。 一旦我调用 $state.go('products.new'),控制器 (ProductCtrl) 就会被调用两次。

由于某种原因,UI 路由器“忘记”了原始状态更改并仅根据 url 调用控制器(在这种情况下确实不明确)。

如果我直接到达页面(深层链接),控制器会按应有的方式被调用一次。

任何建议如何使它工作?

.state('products', {
    abstract: true,
    template: "<div ui-view></div>"
})

.state('products.product', {
    url: '/products/:productId',
    templateUrl: 'views/productView.html',
    controller: 'ProductCtrl'
})

.state('products.new', {
    url: '/products/new',
    templateUrl: 'views/productView.html',
    controller: 'ProductCtrl'
})

【问题讨论】:

    标签: javascript angularjs routing angular-ui-router


    【解决方案1】:

    可能有很多东西,但你没有提供关于你的观点的太多细节:

    它可能在路由中具有控制器和视图之间的绑定(正如您所拥有的那样),并且正如@veroxii 所建议的那样,在视图中也有对ng-controller="ProductCtrl" 的引用,因此路由会在 URL 后立即调用控制器被请求,然后在加载视图后再次请求。

    但也可能是您正在使用带有引导选项卡或类似选项的 UI 路由器(我遇到了这个问题),并且您在选项卡内加载了 &lt;div ui-view&gt;&lt;/div&gt;(嵌套视图)。在这种情况下,控制器可能会被调用 N 次,即视图中 &lt;div ui-view&gt;&lt;/div&gt; 的数量 N 次。将&lt;div ui-view&gt;&lt;/div&gt; 移到标签和标签集之外解决了我的问题。

    【讨论】:

      【解决方案2】:

      我在使用$state.go 时遇到了同样的问题。事实证明这确实是这个问题,我猜你的 HTML 在你的状态中定义的控制器中有 ng-controller="ProductCtrl"

      https://stackoverflow.com/a/15535724/2172360

      【讨论】:

        【解决方案3】:

        我也面临同样的问题。如果我们使用以下语法:

        .state('products.product', { url: '/products/:productId', templateUrl: 'views/productView.html', 控制器:'ProductCtrl' })

        那么无需在您的 productView.html 文件中添加控制器。 这是两次控制器初始化的原因。请删除

        你的看法

        类似于 html 文件中的语法

        【讨论】:

        • 请从您的 html 中删除 ProductCtrl
        • 这是评论而非答案
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-24
        • 2017-06-18
        • 1970-01-01
        • 2018-09-14
        • 2016-11-10
        • 1970-01-01
        • 2011-01-05
        相关资源
        最近更新 更多