簡體   English   中英

如果在$ stateProvider中指定,Angular ui-router在加載時運行控制器兩次

[英]Angular ui-router runs controller twice on load if it is specified in the $stateProvider

我看到我的控制器中的代碼正在運行兩次,因此在chrome dev工具的console.log窗口輸出中顯示

questions.html

<div ng-controller="questionController as vm"> </div>

questionController.js

var questionController = function($location, questionService, $env) {
    var vm = this;
    console.log('in the controller')  // this runs twice 
}

app.js

app.config([
    '$stateProvider',
    '$urlRouterProvider',
    '$locationProvider',
    function ($stateProvider, $urlRouterProvider, $locationProvider) {

        var viewBase = '/apps/src/views/';

        $urlRouterProvider.otherwise("/");

        $locationProvider.hashPrefix(''); // get rid of ! was getting #! 

        $stateProvider
            .state('questions',
            {
                url: "/questions",
                templateUrl: viewBase + "questions.html"//,
                //controller: "questionController"
                //views: {
                //
                //}
            });


    }]
);

請注意,我在路徑中注釋掉了controller: "questionController" ,否則它會運行兩次。

我知道我去年使用過ui-router而且我總是使用控制器:沒有任何問題。

也許是一些導致bug的新版本組合?

基於我正在嘗試的答案,但沒有數據不顯示

我正在使用ui-grid

 <!--<div ng-controller="questionController as vm">-->

       <div ui-grid="{ data: vm }" class="grid"></div>

  <!--</div>-->

注意我用ng-controller注釋了div

  var vm = this
  var promise = questionService.getAllQuestions();

    promise.then(function(response) {
        vm.myData = response;
        console.log('questionCtrl promise data', vm.myData);
    });

console.log確實可以吐出數據

固定

似乎我必須這樣做

路線

     controller: "questionController",
     controllerAs : "vm"

要么

      controller: "questionController"

然后

 <div ui-grid="{ data: vm.myData }" class="grid"></div>

這是因為您通過執行操作將控制器包含在$stateProvider中以及模板本身中

<div ng-controller="questionController as vm"></div>

您可以從HTML中刪除ng-controller

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM