在 Angular 指令中更新 $scope
Updating $scope in an Angular directive
我正在使用以下内容,经过多次挫折和谷歌搜索后,我无法在 Marketplace.buy
的 $resource
之后在 $scope
中更新 data_banks
项目加载成功;
myApp.directive('marketplaceBuy', function() {
return {
restrict: 'A',
controller: ['$scope', "$timeout", "Marketplace", "Notification", "DataBank", function ($scope, $timeout, Marketplace, Notification, DataBank) {
$scope.dooo = function(attrs) {
Marketplace.buy({'item': attrs.itemId},
function(){
DataBank.query({word: "databanks"}, function(data){
$scope.data_bank = data.data;
});
}, function(resp){
Notification.error(resp.data.message);
});
}
}],
link: function ($scope, element, attrs) {
element.bind('click', function () {
$scope.dooo(attrs);
});
}
};
});
使用 $scope.$apply()
错误。
编辑
原来的data_bank
是这样加载的
myControllers.controller('LocationListCtrl', ['$scope', 'DataBank', function($scope, DataBank) {
$scope.data_bank = DataBank.query({word: "databanks"});
});
它绑定到这样的视图
<body ng-cloak>
<div ng-view>
<div ng-repeat="blue_print in data_bank.blue_prints">{{ blue_print.name }}</div>
</div>
</body>
最后像这样使用路由加载控制器
myApp.config(['$routeProvider', '$httpProvider',
function($routeProvider, $httpProvider) {
$httpProvider.interceptors.push('MyInterceptor');
$routeProvider.
when('/locations', {
templateUrl: "/bundles/app/partials/locations.html",
controller: 'LocationListCtrl'
})
}]);
遵循 model.value 规则。
$scope.data_bank.data = data.data;
在模板中,显然,使用 {{data_bank.data}}
好吧,事实证明我已经超前了,没有看到全貌。我的指令实际上并非没有我的 ng-view
。 #lame.
因为我使用的是带有自己的部分的 Symfony,所以我没有意识到我从 Symfony 中包含的部分不在 ng-view
中,而且 ng-view
无论如何都会被我自己的 Angular 替换反正有 Symfony 部分的模板无论如何都行不通。
但毕竟我仍然遇到双向绑定问题,并且我的指令写回 $scope
上属性的所有实例,所以我放弃了它,转而采用新方法。
我正在使用以下内容,经过多次挫折和谷歌搜索后,我无法在 Marketplace.buy
的 $resource
之后在 $scope
中更新 data_banks
项目加载成功;
myApp.directive('marketplaceBuy', function() {
return {
restrict: 'A',
controller: ['$scope', "$timeout", "Marketplace", "Notification", "DataBank", function ($scope, $timeout, Marketplace, Notification, DataBank) {
$scope.dooo = function(attrs) {
Marketplace.buy({'item': attrs.itemId},
function(){
DataBank.query({word: "databanks"}, function(data){
$scope.data_bank = data.data;
});
}, function(resp){
Notification.error(resp.data.message);
});
}
}],
link: function ($scope, element, attrs) {
element.bind('click', function () {
$scope.dooo(attrs);
});
}
};
});
使用 $scope.$apply()
错误。
编辑
原来的data_bank
是这样加载的
myControllers.controller('LocationListCtrl', ['$scope', 'DataBank', function($scope, DataBank) {
$scope.data_bank = DataBank.query({word: "databanks"});
});
它绑定到这样的视图
<body ng-cloak>
<div ng-view>
<div ng-repeat="blue_print in data_bank.blue_prints">{{ blue_print.name }}</div>
</div>
</body>
最后像这样使用路由加载控制器
myApp.config(['$routeProvider', '$httpProvider',
function($routeProvider, $httpProvider) {
$httpProvider.interceptors.push('MyInterceptor');
$routeProvider.
when('/locations', {
templateUrl: "/bundles/app/partials/locations.html",
controller: 'LocationListCtrl'
})
}]);
遵循 model.value 规则。
$scope.data_bank.data = data.data;
在模板中,显然,使用 {{data_bank.data}}
好吧,事实证明我已经超前了,没有看到全貌。我的指令实际上并非没有我的 ng-view
。 #lame.
因为我使用的是带有自己的部分的 Symfony,所以我没有意识到我从 Symfony 中包含的部分不在 ng-view
中,而且 ng-view
无论如何都会被我自己的 Angular 替换反正有 Symfony 部分的模板无论如何都行不通。
但毕竟我仍然遇到双向绑定问题,并且我的指令写回 $scope
上属性的所有实例,所以我放弃了它,转而采用新方法。