2016-03-08 56 views
2

我有一個控制器,該控制器添加了一個函數,但無法獲得通過在錨點上單擊來調用的函數。我看了類似的帖子,但不能真正看到我可能會失蹤。它好像控制器功能不可見?控制器功能沒有從ng-click中調用

模塊和控制器:

var commonModule = angular.module('common', ['ngRoute', 'ng.ckeditor']); 
var mainModule = angular.module('main', ['common']); 
//mainModule.config(function ($routeProvider, $locationProvider) { 
// $locationProvider.html5Mode(true); 
//}); 

commonModule.factory('viewModelHelper', function ($http, $q, $window, $location) { 
    return MyApp.viewModelHelper($http, $q, $window, $location); 
}); 
commonModule.factory('validator', function() { 
    return valJs.validator(); 
}); 


    mainModule.controller("rootViewModel", 
     function ($scope, $http, $q, $routeParams, $window, $location, viewModelHelper, $rootElement) { 

      //test 
      console.log("creating controller"); 

      var self = this; 

      viewModelHelper.apiGet('api/PageContent/1', null, 
      function (result) { 
       $scope.htmlEditor = result.data; 
      }); 

      $scope.ToggleEditor2 = function() { 

       //test 
       console.log("hello"); 

       if ($scope.editorVisible == true) { 
        $scope.editorVisible = false; 
       } 
       else { 
        $scope.editorVisible = true; 
       } 
      } 
     }); 

控制器在根級別的頁面所引用:
其中在使用ASP.Net MVC因爲即時通訊這種情況下,是在我的_layout.cshtml

<body data-ng-app="main" data-ng-controller="rootViewModel"> 

在一個被加載的(mvc)視圖中,我有一個帶有ng-click的按鈕,它調用了ToggleEditor2函數,但它從來沒有調用過。無法得到一個斷點,在鉻開發控制檯中打,我沒有看到寫入日誌的任何東西。

<input type="button" ng-click="ToggleEditor2()" value="test me" /> 

更新:
如果我換一個DIV錨並有指定「rootviewModel」控制器,日誌信息被寫入。嗯 - 有人告訴我它與範圍有關嗎?

<div data-ng-controller="rootViewModel"> 
    <input type="button" ng-click="ToggleEditor2()" value="test me" /> 
</div> 
+0

你確定你的應用程序/模塊只被稱爲「main」而不是「mainModule」,因爲變量名是在你的javascript中聲明的? 「mainModule.controller(......)」。我之前做過 – mhodges

+1

是的,我更新了上面的帖子以包含使用 – bitshift

+1

的im定義。可能 - 使用$ scope不是在控制器和視圖之間來回傳遞數據的最佳方式。使用controllerAs語法是解決方案。這裏是關於新語法的一個很好的資源:https://toddmotto.com/digging-into-angulars-controller-as-syntax/ – mhodges

回答

1

問題

與$範圍的一個常見問題是,使用任何類型的嵌套控制器或模塊的時候,你的$示波器可以踩對方,造成的問題,如你所經歷過。

解決方案

採用了棱角分明的「控制器」語法是這個問題的建議的解決方法。它允許您創建同一控制器的多個實例,同時爲每個實例定義和維護一個唯一的作用域。

This Article是我用來理解和實現這個新語法的很好的資源。

相關問題