【问题标题】:Updating $scope in an Angular directive在 Angular 指令中更新 $scope
【发布时间】:2016-02-05 18:14:40
【问题描述】:

我正在使用以下内容,经过多次挫折和谷歌搜索,我无法在 $resource for Marketplace.buy 成功加载后更新 $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'
      })
  }]);

【问题讨论】:

  • 你不能将$scope.doo 函数放在链接函数中并完全避免控制器选项吗?
  • 我认为他想注入 Marketplace、DataBank 和 Notification 并使用它们
  • 能否提供给我们查看代码?或者视图如何访问这个范围?
  • 谢谢,查看我的编辑信息

标签: angularjs angularjs-directive angularjs-scope angularjs-resource


【解决方案1】:

遵循 model.value 规则。

 $scope.data_bank.data = data.data;

在模板中,显然,使用 {{data_bank.data}}

Miško Hevery talks about scope

【讨论】:

  • 这导致Cannot set property 'data' of undefined
  • 在父控制器中预先创建模型。 $scope.data_bank = {}
  • 它已经存在于使用相同资源调用的父级中。这应该只是更新它?
  • 对不起伙计,可能超出了我的经验
  • 我在原始问题中添加了更多信息,以防您想再试一次?
【解决方案2】:

好吧,事实证明我已经超越了自己,并没有看到整个画面。我的指令实际上并非没有我的ng-view。 #跛脚。

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

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

【讨论】:

    猜你喜欢
    • 2015-12-11
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多