AngularJS-双向绑定无法使用服务

AngularJS-双向绑定无法使用服务,angularjs,Angularjs,我正在学校学习英语 我刚刚修改了一个关于服务的示例。。。代码如下: {{num}} {{hex}} 具有将给定数字转换为十六进制数字的方法的自定义服务 var-app=angular.module'myApp',[]; 应用程序服务“hexafy”,功能{ this.myFunc=函数x{ 返回x.toString16; } }; 应用程序控制器'myCtrl',函数$scope,hexafy{ $scope.num=200; $scope.hex=hexafy.myFunc$scope.nu

我正在学校学习英语

我刚刚修改了一个关于服务的示例。。。代码如下:

{{num}} {{hex}} 具有将给定数字转换为十六进制数字的方法的自定义服务

var-app=angular.module'myApp',[]; 应用程序服务“hexafy”,功能{ this.myFunc=函数x{ 返回x.toString16; } }; 应用程序控制器'myCtrl',函数$scope,hexafy{ $scope.num=200; $scope.hex=hexafy.myFunc$scope.num; };
这里不需要服务,你可以简单地使用$watch上的num。见下面的代码片段,它会更新你的ui,我已经更新了你的控制器代码,请检查

app.controller('myCtrl', function($scope, hexafy) {
        $scope.num = 200;
        $scope.hex = "some default val";

        $scope.$watch('num', function(newValue, oldValue) {
            $scope.hex = newValue.toString();
        });

});

控制器初始化时,只调用hexafy.myFunc一次,因此只有初始值转换为hex。如果希望在运行时范围变量的值更改时调用函数,则需要过滤器。AngularJS有很多内置过滤器,可以随时使用。 您还可以定义自定义筛选器,就像定义服务或控制器一样

{{num}} {{num | hexafy}} 将给定数字转换为十六进制数字的自定义筛选器

var-app=angular.module'myApp',[]; 应用过滤器'hexafy',函数{ 返回函数x{ 返回Numberx.toString16;//在调用toString之前,还要将字符串转换为数字。 } }; 应用程序控制器'myCtrl',函数$scope{ $scope.num=200; //$scope.hex=hexafy.myFunc$scope.num; };
$scope.hex未更新,因为它无法自行更新

首次加载控制器时,只调用hexafy.myFunc一次

如果希望$scope.hex属性随num更改,可能需要监视num属性

$scope.$watch('num', function(newVal, oldVal) {
$scope.hex = hexafy.myFunc($scope.num); /// or newVal
}
传入$scope.num的函数将在$scope.num的值每次更改时调用$watch

有关更多信息,请参阅手表部分


希望有帮助。

您的文本框仅绑定到“num”$scope.hex未绑定到文本框'。这样在您键入文本时它就不会更新。您可以在“num”上使用“$watch”

app.controller('myCtrl', function($scope, hexafy) {

  $scope.num = 200;
  $scope.$watch('num', function() {
      $scope.hex = hexafy.myFunc(parseInt($scope.num));

  });
});