我有一个指令需要显示值服务中存储的数据。它看起来像这样:
angular.module('myApp', [])
.value('user', {})
.run(['user', function (user) {
// "user" value is set by result of $http.get(),
// but hard-coding value for example purposes
user = {
name: 'Foo'
};
}])
.directive('userProfile', ['user', function (user) {
return {
restrict: 'E',
controller: function ($scope) {
$scope.user = user;
},
template: '<span>User name: {{ user.name }}</span>'
};
}]);然而,当指令的控制器获得注入的user对象时,它就是undefined。我是不是遗漏了什么?
下面是可以使用的实时代码:http://jsfiddle.net/HB7LU/8433/
发布于 2014-11-21 03:12:56
working sample
angular.module('myApp', [])
.value('user', {})
.run(['user', function (user) {
// "user" value is set by result of $http.get(),
// but hard-coding value for example purposes
user.hardCoded = {
name: 'Foo'
};
}])
.directive('userProfile', ['user', function (user) {
return {
restrict: 'E',
controller: function ($scope) {
$scope.user = user.hardCoded;
},
template: '<span>User name: {{ user.name }}</span>'
};
}]);由于指令创建了自己的作用域,因此您可以通过使用原型链接进行更高级别的操作。
不是只使用'user‘对象,而是添加一个点。
发布于 2014-11-21 18:41:07
以下是工作示例
http://jsfiddle.net/HB7LU/8460/
尝试下面的代码
angular.module('myApp', [])
.value('user', {name:'foo'})
.directive('userProfile', ['user', function (user) {
return {
restrict: 'E',
controller: function ($scope) {
$scope.user = user;
},
template: '<span>User name: {{ user.name }}</span>'
};
}]);发布于 2014-11-21 18:50:48
run函数引用user变量
考虑您的代码的以下部分:
angular.module('myApp', [])
.run(['user', function (user) {
// "user" value is set by result of $http.get(),
// but hard-coding value for example purposes
user = {
name: 'Foo'
};
}]);不是设置用户的属性,而是重新引用angular.value("user")参数以指向其他内容。您应该改为这样做:
angular.module('myApp', [])
.run(['user', function (user) {
// "user" value is set by result of $http.get(),
// but hard-coding value for example purposes
user.name = "Foo";
// you are setting the properties of user
}]);https://stackoverflow.com/questions/27046822
复制相似问题