为什么再次单击按钮时不调用angularjs控制器?

时间:2015-10-27 20:03:43

标签: angularjs

您好我有这样的网页,     左边有按钮,     右侧是ng-view的区域(在我的例子中,有几个复选框和提交按钮)

当我点击按钮时,它会立即显示 1.使用路由提供程序,它将到达其控制器和模板URL。 2.控制器将从后端查询一些信息(node.js) 3.上述信息将由模板URL用于显示初始复选框选项。

现在这个程序第一次正常工作。但是当我再次点击按钮时,我希望它再次调用它的控制器,但是从调试器来看,似乎什么也没发生,控制器没有被调用。

非常困惑,为什么这样呢???

在服务器端,

app.get('/2getMyDiagValue', function(req, res)
{
    console.log("get my diag");
    var v1=0, v2=0;
    var shellCmd = "... some executable ... ";

    exec(shellCmd, function(error, stdout, stderr) {
        if(error) {
            console.log("Error running getting sid");
        } else {
            // get v1 and v2 from stdout
        }

    res.json( {"mystuff1":v1, "mystuff2":v2} );

});

app.post('/2setMyDiagValue', function(req, res)
{
    // get the checkbox options from webpage,
    // and save them in the backend
}

在客户端,

app.config(['$routeProvider',
    function($routeProvider) {
         $routeProvider.when('/5MyDiag', {
             templateUrl: 'partials/MyDiag.html',
             controller: 'MyDiagController' 
         });
    }
]);

app.controller('myDiagController', function($scope, $http, $routeParams, QueryMyService) {

    // using http.get() to get existing my setting from server side
    QueryMyService.getInfoFromUrl7('/2getMyDiagValue').then(function(result) {
        $scope.formData = result.formDataObjects;
    }, function(error) {
        alert("Error");
    } );

    $scope.submitForm = function() {
        console.log("posting form data ...");
        $http.post("/2setMyDiagValue", 
                   JSON.stringify($scope.formData)).success(function(){} );
    };

});

app.factory('QueryMyService', function($http, $q, $location) {

    var factory = {};
        var browserProtocol = 'http';
        var address = 'localhost';
        var server = browserProtocol + '://' + address;

    //////////////////////////////////////////////////////////
     factory.getInfoFromUrl7 = function(myUrl) {
        var deferred = $q.defer();

        $http.get(myUrl).success(function(data) {
            deferred.resolve(data);
        }).error(function(){
            deferred.reject();
        }); 

      return deferred.promise;
    }

    return factory;
}

复选框网页本身:MyDiag.html

<form ng-submit="submitForm()" ng-controller="myDiagController">
    <div class="control-group" style="color:black">
        <label>My Checkbox</label>
        <div class="checkbox">
            <label class="checbox-inline" >
                <input class="big-checkbox" type="checkbox" ng-model="formData.myStuff1" 
                   ng-true-value="1" ng-false-value="0" ng-checked="formData.myStuff1 == 1">
                       <h4>Message 1</h4>
                <input class="big-checkbox" type="checkbox" ng-model="formData.myStuff2" 
                   ng-true-value="1" ng-false-value="0" ng-checked="formData.myStuff2 == 1">
                       <h4>Message 2</h4>
            </label>
        </div>

    <br>
    <input class="btn-primary" type="submit">

</form>

的index.html

<div class="container">
    <a class="btn btn-md btn-info custom-btn" ng-href="#/5MyDiag">Diagnostics</a>
</div>

由于我需要删除变量中的公司名称,因此可能存在不匹配,但想法是相同的。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

与大师谈过,如果角度感觉没有改变网页GUI,那么它应该如此。在我的情况下,我点击相同的按钮两次,它不会再次呼叫路由提供商第二次点击。

如果你知道这个概念,你不需要阅读我的代码来回答这个问题。

希望我能得到4分。