我有一个控制器,当我从一个带有参数的链接打开控制器时定义了一个路由参数,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/>
答案 0 :(得分:0)
试试:
ng-init="desiredValue = $scope.realValue"
根据angular的文档
“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
有效,并且文本框已正确填充。