$ scope init上未设置输入类型编号。我怎样才能在控制器init上设置输入?

时间:2016-09-13 19:02:16

标签: angularjs

我有一个控制器,当我从一个带有参数的链接打开控制器时定义了一个路由参数,init捕获那些参数,但它没有显示表单上的数据。 init函数在控制器初始化时运行,它可以很好地捕获所有路由参数,但是当我将它分配给作用域上的模型时,输入没有得到值。我试过$ digest和$ apply但是那里不起作用。如何使数字输入仅在初始化时显示路径中的值?

我的路线配置:

 when('/mypage/:ofid/:nfid?', {
            templateUrl: 'admin/templates/mytemplate.html',
            controller: 'MyTemplateController'
          }).

我的控制器片段:

angular.module('MyModule')
    .controller('MyTemplateController', ['$scope', '$log', '$routeParams', .....
    function ($scope, $log, $routeParams, ...) {
        $scope.oldId;
        $scope.newId;   
        ...
        $scope.init = function () {
            $scope.oldId = $routeParams.ofid;
            newId = $routeParams.nfid;

        }
        $scope.init();
    }

模板片段:

            <input type="number"
                   class="form-control"
                   ng-model="oldId"
                   required/>

2 个答案:

答案 0 :(得分:0)

试试:

ng-init="desiredValue = $scope.realValue"

根据angular的文档

“ngInit指令允许您评估当前范围中的表达式。”

但应谨慎使用

https://docs.angularjs.org/api/ng/directive/ngInit

答案 1 :(得分:0)

$routeParams作为字符串传递,在数字输入中使用它们需要解析。 使用$scope.oldId = parseInt($routeParams.ofid);适用于这种情况。

app.controller('MyTemplateController', ['$scope', '$log', '$routeParams',
  function($scope, $log, $routeParams) {
    $scope.oldId;
    $scope.newId;
    $scope.init = function() {
      $scope.oldId = parseInt($routeParams.ofid);
      $scope.newId = $routeParams.nfid;
      $log.log($scope.oldId, $scope.newId);
    };
    $scope.init();
  }
]);

$log.log($scope.oldId, $scope.newId);末尾的init在Chrome控制台中显示2, '1',这绝对证明parseInt有效,并且文本框已正确填充。

http://plnkr.co/edit/Oc777cYulT11KQMqdnmd?p=preview