您可以在创建时将参数传递给AngularJS控制器吗?
我有一个负责与API通信的控制器,用于更新用户属性,名称,电子邮件等。每个用户都有一个'id'
,当查看配置文件页面时,它会从服务器传递。
我想将此值传递给AngularJS控制器,以便知道当前用户的API入口点。 我试过在ng-controller
传递值。 例如:
function UserCtrl(id, $scope, $filter) {
$scope.connection = $resource('api.com/user/' + id)
并在HTML中
<body ng-controller="UserCtrl({% id %})">
其中{% id %}
打印从服务器发送的ID。 但我得到错误。
在创建时将值传递给控制器的正确方法是什么?
笔记:
这个答案是旧的。 这只是关于如何达到预期结果的概念证明。 但是,根据下面的一些评论,这可能不是最好的解决方案。 我没有任何文档来支持或拒绝以下方法。 有关此主题的进一步讨论,请参阅下面的一些评论。
原始答案:
我回答是肯定的,你绝对可以使用ng-init
和一个简单的init函数。
这是关于暴徒的例子
HTML
<!DOCTYPE html>
<html ng-app="angularjs-starter">
<head lang="en">
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl" ng-init="init('James Bond','007')">
<h1>I am {{name}} {{id}}</h1>
</body>
</html>
JavaScript的
var app = angular.module('angularjs-starter', []);
app.controller('MainCtrl', function($scope) {
$scope.init = function(name, id)
{
//This function is sort of private constructor for controller
$scope.id = id;
$scope.name = name;
//Based on passed argument you can make a call to resource
//and initialize more objects
//$resource.getMeBond(007)
};
});
我对此很迟,我不知道这是否是一个好主意,但是您可以在控制器函数中包含$attrs
,允许控制器使用元素上提供的“参数”进行初始化,例如
app.controller('modelController', function($scope, $attrs) {
if (!$attrs.model) throw new Error("No model for modelController");
// Initialize $scope using the value of the model attribute, e.g.,
$scope.url = "http://example.com/fetch?model="+$attrs.model;
})
<div ng-controller="modelController" model="foobar">
<a href="{{url}}">Click here</a>
</div>
再次,不知道这是一个好主意,但它似乎工作,是另一种选择。
这也适用。
使用Javascript:
var app = angular.module('angularApp', []);
app.controller('MainCtrl', function($scope, name, id) {
$scope.id = id;
$scope.name = name;
// and more init
});
HTML:
<!DOCTYPE html>
<html ng-app="angularApp">
<head lang="en">
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<script src="app.js"></script>
<script>
app.value("name", "James").value("id", "007");
</script>
</head>
<body ng-controller="MainCtrl">
<h1>I am {{name}} {{id}}</h1>
</body>
</html>
链接地址: http://www.djcxy.com/p/88169.html
上一篇: Can you pass parameters to an AngularJS controller on creation?