连接ng-click到控制器功能

时间:2015-12-09 06:48:42

标签: javascript angularjs angular-ui-router angularjs-ng-click

我无法获得部分div ng-click属性来触发我想要的功能,称为testDivClicked()

在我的应用程序控制器中,我提供了一个名为test的部分路径:

(function () {
    "use strict";

    angular
        .module('myApp', ['ngRoute', 'ui.bootstrap', 'myApp.main', 'myApp.test'])
        .config(config);

    config.$inject = ['$routeProvider'];

    function config($routeProvider) {
        $routeProvider
            .when('/', {templateUrl: '/partials/main.html', controller: 'MainController', controllerAs: 'vm'})
            .when('/test', {templateUrl: '/partials/test/test.html', controller: 'TestController', controllerAs: 'vm'})
            .otherwise({redirectTo: '/'});
    }
})();

以下是插入父视图的test.html部分:

<div class="outer-holder test-outer-holder">
    <div class="middle-holder test-middle-holder">
        <div class="inner-holder test-inner-holder">
            <div class="test-container" ng-click="vm.testDivClicked('test-container')">
                <legend>Test</legend>
            </div>
        </div>
    </div>
</div>

我的test控制器:

(function () {
    "use strict";

    angular
        .module("myApp.test")
        .controller("TestController", TestController);

    TestController.$inject = [];

    function TestController() {
        var vm = this;

        function testDivClicked(msg) {
            console.log("message:", msg);
        }
    }
})();

当我点击最里面的div时,我希望testDivClicked()记录我点击它。

我在此设置中缺少什么,这样我才能让ng-click工作?

3 个答案:

答案 0 :(得分:1)

您应该写vm.testDivClicked = function(msg)而不是function testDivClicked。你声明了一个本地函数。

答案 1 :(得分:0)

为创建控制器提供的模块名称myApp.test是错误的。而是使用angular.module("myApp")

所以你的测试控制器应该是

(function () {
    "use strict";

    angular
        .module("myApp")
        .controller("TestController", TestController);

    TestController.$inject = [];

    function TestController() {
        var vm = this;

        function testDivClicked(msg) {
            console.log("message:", msg);
        }
    }
})();

答案 2 :(得分:0)

正如Alexander先前所述,函数testDivClicked函数与vm(this)无关。因此它在dom中不被识别为vm.testDivClicked('test-container')

这是修改后的部分。

function TestController() {
        var vm = this;

      vm.testDivClicked = function(msg) {
            console.log("message:", msg);
        }
    }