2013-05-29 93 views
4

在AngularJS中,可以從模板中調用方法而無需指令或routeProvider來綁定範圍?ng-click不會從模板中觸發

我的具體問題是,我的主控制器(AppCtrl)位於我的索引頁的主體。在索引上,我使用一個ngView根據路由引入模板。除默認模板外,每個RouteProvider都有自己的控制器。我認爲,由於範圍繼承,我可以使用從模板AppCtrl定義的方法,但試圖做一個簡單的警報或console.log不會註冊任何東西。我知道$範圍正在進入模板,因爲我的數據正確顯示。

這似乎是一個$範圍的問題,但我不知道如何解決它。我是否需要創建一個指令來明確綁定它們?

的index.html

<body ng-controller="AppCtrl"> 
    <div ng-view></div> 
</body> 

app.js

var myApp = angular.module('myApp', []) 
.config(function($routeProvider) { 
    .when('/', { 
    templateUrl: 'partials/list.html' 
    }), 
    .when('/info/:id, { 
    templateUrl: 'partials/info.html' 
    controller: 'InfoCtrl' 
    }); 
}); 

controllers.js

var controllers = {}; 
controllers.AppCtrl = function($scope, $location, Factory) { 
    ... 
    $scope.doSomething = function() { 
    alert('hello'); 
    }; 
}; 
myApp.controller(controllers); 

list.html

<a href="#" ng-click="doSomething()">Do Something</a> // no response 
+1

嘗試將它追加到$ rootScope對象上 – Ven

+2

它應該工作。這是[工作小提琴](http://jsfiddle.net/mrajcok/zcybQ/)。 –

+0

每一次。與此混淆了一兩個小時,今天它的工作。我發誓,每當我c and and ask地尋求幫助時,就會開始自己開展工作。那麼,謝謝你的迴應。 – iamsar

回答

3

我似乎已經找到了我的問題的根源。如上所述,使用函數確實有效。當我回去解決我的具體問題時,該功能再次拒絕工作。原來,這不是一個範圍問題,而是一個綁定問題。我給出的例子並不準確,但確實幫助我隔離了這個問題。我將演示:

<!-- alert fires, tries to find '#' in location, binded values do not update --> 
<a href="#" ng-click="addOne()">Add 1</a> 

<!-- key binding does not update --> 
<a href="#" ng-click="key = key+1" ng-init="key=0">Add 1</a> 

<!-- key updates --> 
<a ng-click="key = key+1" ng-init="key=0">Add 1</a> 

無論出於何種原因,包括href都阻止了綁定值的更新。有誰知道是否有可用作解決方法的「preventDefault」,以便可以包含h​​refs進行驗證?看起來這是一個錯誤或ng-click只用於按鈕。

+1

1.查看ngHref文檔中的示例,獲取preventDefault樣式單擊(向下翻頁 - 5次單擊示例演示) - http://docs.angularjs.org/api/ng/directive/ngHref – neoswf

+1

2.第二件事 - 你總是可以編寫一個指令並將它作爲一個屬性添加到你的元素,做preventDefault – neoswf

+1

@neoswf感謝你添加鏈接。當時我不相信這是他們的文檔。 – iamsar