【问题标题】:Why angularjs controller is not called when i click the button again?为什么当我再次单击按钮时不调用 angularjs 控制器?
【发布时间】:2016-01-27 10:09:07
【问题描述】:

您好,我有一个这样的网页, 左侧有按钮, 右侧是 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>

由于我需要删除变量中的公司名称,可能会有不匹配,但想法是一样的。感谢您的帮助。

【问题讨论】:

  • 如果您发布实际代码,我们可以进一步帮助您
  • 对不起,太忙了,以为这是一个普遍的问题,现在添加代码。

标签: angularjs


【解决方案1】:

与大师交谈过,如果 Angular 感觉 Web GUI 没有变化,应该是这样的,例如在我的例子中,我点击了同一个按钮两次,第二次点击它不会再次调用路由提供者。

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

希望我能拿回 4 分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2018-01-18
    • 2011-02-20
    • 2011-05-07
    • 2015-12-28
    • 2018-11-26
    • 1970-01-01
    相关资源
    最近更新 更多