在 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}}

Miško Hevery talks about scope

好吧,事实证明我已经超前了,没有看到全貌。我的指令实际上并非没有我的 ng-view。 #lame.

因为我使用的是带有自己的部分的 Symfony,所以我没有意识到我从 Symfony 中包含的部分不在 ng-view 中,而且 ng-view 无论如何都会被我自己的 Angular 替换反正有 Symfony 部分的模板无论如何都行不通。

但毕竟我仍然遇到双向绑定问题,并且我的指令写回 $scope 上属性的所有实例,所以我放弃了它,转而采用新方法。